MATLAB程序出错了,怎么样修改

MATLAB程序出错了,怎么样修改,第1张

题主提供的代码没有错误,但运行时出错,其问题在于,题主把自定义函数与主程序的运行顺序搞反了。

方法1、分别将y1=Q(r)、y2=R(q)和y3=S(r)自定义函数保存为Qm、Rm和Sm文件,再将主程序保存为mainm文件,然后在命令窗口中,执行 >>main %回车

方法2、建立mainm文件,按下列顺序书写程序

①主程序

function main( )

clear;clc;

format short 

。。。。。。

disp([r',theta'])

②Q(r)自定义函数、R(q)自定义函数和S(q)自定义函数

function y1=Q(r)

c1=27132e15;

。。。。。。。

function y2=R(q)

y2=q;

function y3=S(r)

c1=27132e15;

。。。。。。。

最后执行可得

I = imread('图1jpg');  //读入图像

I = rgb2gray(I);  //灰度变换

m = mean2(I);  //计算平均灰度值

s = find(I < m  075);  //查找小于075倍平均灰度元素位置

I1 = ones(size(I,1), size(I,2))  255;  //生成与I同维矩阵,矩阵元素值均为255

I1(s) = 0;  //s位置(小于075倍平均灰度元素位置)元素赋为0

subplot(1,2,1), imshow(I);  //生成1行2列窗口,窗口1显示图像I                     

subplot(1,2,2), imshow(I1);  //生成1行2列窗口,窗口2显示图像I1

total = size(I, 1)  size(I, 2);  //I的行数与列数相乘,其值赋给total

num = size(s, 1);  //s的行数赋给num

result = num / total;  //结果

您好,这样的:

闲着没事的做法是,使用save mat的命令,想查看的时候,load mat就可以了。

再就是设置全局变量,子程序中想要用的变量弄成全局变量。

这段代码不要再命令窗口中写,而是在M文件的Editor建立一个文件,只写前三行,比如保存为testadd把,而把function及其下一行放在令一个文件中,直接保存,文件名千万别改,执行testadd应该就没问题了。

把一个简单的m代码编译成C++接口的DLL,然后在C++程序中调用。为了简单起见,这里的C++程序是一个Win32 Console程序,而不是Windows图形界面的程序,不过不妨碍我们的讨论。

下面是这个例子用到的m代码。它定义了一个名为myadd2的函数

function [y,z] = myadd2(a, b)

% dummy function, just to demonstrate the idea

y = a+b;

z = a+2b;

end

复制代码

首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。具体做法是在MATLAB命令行执行“mbuild -setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:

mcc -W cpplib:libmyadd2 -T link:lib myadd2

复制代码

结果,我们将会得到包含libmyadd2dll,libmyadd2ctf,libmyadd2h,libmyadd2lib等在内的一些文件。接下来我们只需要这四个文件。

然后在VS2005中创建一个Win32 Console的VC++工程,我在测试时取名为testmyadd2_r2007b。把以上四个文件拷贝到VC++工程的源代码所在目录。

接下来设置VC++,让它能找到MATLAB接口函数的定义及连接库函数。可以有两种设置方式:一种是改VS2005中关于VC++的设置,这样的好处是每个新的工程都能自动获得这个设定;而另一种是只改当前工程的设置,也就是设置只对该工程有效。这里用后一种方式。

在VS2005中打开工程testmyadd2_r2007b,选择菜单“Project-->;Properties,在出来的对话框上,把MATLAB提供的include路径加到VC++的头文件搜索路径。

然后把相应的lib所在目录加到linker的额外搜索路径上

接下来,告诉VC++,我们的这个程序需要连接到另外两个额外的库函数:libmyadd2lib和mclmcrrtlib。中间用空格隔开

最后则是程序代码。这个程序只有一个main函数,其完整代码附在下面给大家参考。

#include "stdafxh"

#include <iostream>

#include "mclmcrh"

#include "mclcppclassh"

#include "libmyadd2h"

int _tmain(int argc, _TCHAR argv[])

{

std::cout << "Hello world!" << std::endl;

/ Initialize the MCR /

if( !mclInitializeApplication(NULL,0) )

{

std::cout << "Could not initialize the application!" << std::endl;

return -1;

}

// initialize lib

if( !libmyadd2Initialize())

{

std::cout << "Could not initialize libmyadd2!" << std::endl;

return -1;

}

try

{

// declare and initialize a

mwArray a(2, 2, mxDOUBLE_CLASS);

double aData;

aData = new double[4];

复制代码

本帖隐藏的内容

int i;

for( i=0; i<4; ++i)

{

aData = 10i;

}

// print output

std::cout << "a = " << std::endl;

std::cout << aData[0] << ",\t" << aData[1] << std::endl;

std::cout << aData[2] << ",\t" << aData[3] << std::endl;

aSetData(aData, 4);

// declare and initialize b

mwArray b(2, 2, mxDOUBLE_CLASS);

b(1,1) = 11;

b(1,2) = 12;

b(2,1) = 21;

b(2,2) = 22;

mwArray y(2, 2, mxDOUBLE_CLASS);

mwArray z(2, 2, mxDOUBLE_CLASS);

// call the function

myadd2(2, y, z, a, b);

// copy data from mwArray to C++ objects

// allocate outputs

double yData, zData;

yData = new double[4];

复制代码

if( yData == NULL )

{

std::cout << "Failed to allocate memory for yData!" << std::endl;

return -1;

}

zData = new double[4];

if( zData == NULL )

{

std::cout << "Failed to allocate memory for zData!" << std::endl;

return -1;

}

// copy data from mwArray to C++

yGetData(yData, 4);

zGetData(zData, 4);

// print output

std::cout << "y = " << std::endl;

std::cout << yData[0] << ",\t" << yData[1] << std::endl;

std::cout << yData[2] << ",\t" << yData[3] << std::endl;

std::cout << "z = " << std::endl;

std::cout << zData[0] << ",\t" << zData[1] << std::endl;

std::cout << zData[2] << ",\t" << zData[3] << std::endl;

// deallocate memory

delete [] aData;

delete [] zData;

delete [] yData;

}

catch( const mwException& e)

{

std::cerr << ewhat() << std::endl;

}

// terminate the lib

libmyadd2Terminate();

// terminate MCR

mclTerminateApplication();

return 0;

}

以上就是关于MATLAB程序出错了,怎么样修改全部的内容,包括:MATLAB程序出错了,怎么样修改、请帮忙解释下MATLAB小程序各句含义(图像识别)、matlab子程序应用主程序变量的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9880718.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存