matlab编译函数
A. 怎么用matlab编译下面的函数并画图,其中ξ为因变量,δ为自变量,h和h0已知
已知X123求Y的话,直接使用你的公式即可
代码:
X1=[x11 x12 ... x1n];%行向量里都是n个数字,下同
X2=[x21 x22 ... x2n];
X3=[x31 x32 ... x3n];
Y=A0+A1*X1+A2*X2+A3*X3;%A0123为四个已知数字
这样就求出了1行n列的行向量Y
至于你说的“预测”,我猜是A0123是待定系数吧。
也就是已知X123及Y的n组量,希望用三元一次函数进行拟合吧。
这样的话,若用最小二乘法,思路是:
{下面我用sum(f(i),1,10)表示f(i)表达式从1加到10的值}
第一、设A0123为待定系数,并使用X123计算Y的估计值YY
YY=sum(A0+A1*X1i+A2*X2i+A3*X3i,1,n)
第二、计算真实的Y和估计的YY每个对应项之差的平方,再求总和S
S=sum((A0+A1*X1i+A2*X2i+A3*X3i-Yi)^2,1,n)
第三、目的是求使S最小的A0123,即为最小二乘解
这实际上是可微多维函数求极值的问题,用对各自变量求偏导并同时取零解决
此时针对上面的S等式分别对A0123求偏导
dS/dA0=sum(2*(A0+A1*X1i+A2*X2i+A3*X3i-Yi),1,n)
dS/dA1=sum(2*(A0+A1*X1i+A2*X2i+A3*X3i-Yi)*X1i,1,n)
dS/dA2=sum(2*(A0+A1*X1i+A2*X2i+A3*X3i-Yi)*X2i,1,n)
dS/dA3=sum(2*(A0+A1*X1i+A2*X2i+A3*X3i-Yi)*X3i,1,n)
上面4等式右边提取A0123,再两边同除2得
(dS/dA0)/2=A0*n+A1*sum(X1i,1,n)+A2*sum(X2i,1,n)+A3*sum(X3i,1,n)-sum(Y,1,n)
(dS/dA1)/2=A0*sum(X1i,1,n)+A1*sum(X1i*X1i,1,n)+A2*sum(X2i*X1i,1,n)+A3*sum(X3i*X1i,1,n)-sum(Y*X1i,1,n)
(dS/dA2)/2=A0*sum(X2i,1,n)+A1*sum(X1i*X2i,1,n)+A2*sum(X2i*X2i,1,n)+A3*sum(X3i*X2i,1,n)-sum(Y*X2i,1,n)
(dS/dA3)/2=A0*sum(X3i,1,n)+A1*sum(X1i*X3i,1,n)+A2*sum(X2i*X3i,1,n)+A3*sum(X3i*X3i,1,n)-sum(Y*X3i,1,n)
令上4等式左边为0,注意到右边都是“A0*已知常数+A1*已知常数+A2*已知常数+A3*已知常数-已知常数”的形式
因此得到一个四元一次非齐次方程组,用高等数学中线性方程组的求解方法求解(或者甚至用初中的代入法求解方程组)即可
这样就得到了最佳的A0123四个数字,这四个参数使得拟合的Y=A0+A1*X1+A2*X2+A3*X3函数,与给定的X123和Y数据在最小二乘意义下差值最小,即最佳拟合
B. matlab编一个函数
(1)
function y=TestEs(x)
y=0.5*exp(x/3)-x.^2.*sin(x);
(2)
x=3;
y=TestEs(x)
x=[2,3.5];
y=TestEs(x)
C. 用matlab如何编写一个函数文件,实现 n!
用matlab如何编写一个函数文件,实现n!的方法。
如下参考:
1.首先在计算机上打开matlab软件,如下图所示。

D. 如何用matlab编写函数程序
你给出的是C语言程序吧,matlab也是一样的,只不过数组的编号是从1开始的,而且语法有些不同。
t(1)=0
s(1)=0
B(1)=0
for
n=2:160
x(n)=z600028;
t(n)=x(n).*2./13+t(n-1)*11/13
s(n)=x(n)*2/27+s(n-1)*25/27
A(n)=t(n)-s(n)
B(n)=A(n)*2/10+B(n-1)*8/10
end
增加:
此时你已经得到了A(n)与B(n),再加入下列语句,就可以画出他们的图像。
figure;
plot(A);
figure;
plot(B);
E. matlab这几个函数如何编写。求源代码。全部解决再加100分
1、在命令窗口中输入:type 函数名(例如type rgb2gray等),就会在命令窗口出现该函数的相关说明及源代码;
2、在命令窗口中输入:open 函数名(例如open rgb2gray等),就会打开该函数的m文件;
3、在命令窗口中输入:edit函数名(例如edit rgb2gray等),同样会打开该函数的m文件;
4、还有一种方法就是故意将原函数的参数类型或者个数写错,就会出现出错提示,点击提示出错处,也可以打开该函数的m文件;
很多大型的函数都能获得源代码,但是MATLAB里面有一些built-in函数是看不到源代码的,sort就是其中之一。这些函数是预编译好的,运行效率非常好,比如像find、min、max等频繁用到的一些函数还有很多矩阵运算函数都是built-in函数。
自带函数,用type+函数名。比如,type dwt2可以显示dwt2函数的代码
但是,好像没有qpsk这个函数.
F. matlab怎样编写函数并调用函数
1'编写一个m文件,如:
function f=add(a,b)
f=a+b;
end
保存为add.m,比如保存在桌面
2'将桌面添加到matlab搜索路径中

G. matlab中用什么实现公式编译
由于时间仓促,简单地学习了如何将.m文件打包为.exe文件
首先介绍一下MATLAB编译器
MATLAB编译器
功能
1、产生C源码,并进而生成MEX文件。这种MEX文件的优点是:一,当程序变量为实数,或向量化程度较低,或含有循环结构时,采用该法可提高运行速度;二,与ASCII码的M文件不同,MEX文件采用二进制代码生成,能更好地隐藏文件算法,使之免遭非法修改。
2、产生C或C++源码,以便与其他C/C++模块结合行成独立的外部应用程序。运行所产生的应用程序,无需MATLAB环境的支持,但是往往需要MATLAB提供的C/C++数学库;如果调用了MATLAB绘图指令,则还需要MATLAB提供的C/C++图形库
3、产生C MEX的S函数,与Simulink配合使用,以提高S-函数的运行速度
4、产生C 共享库(动态链接库)或C++静态库,他们的使用无需MATLAB环境的支撑,但是需要MATLAB的数学库
局限性
1、无法编译脚本文件
2、不支持用户自定义对象
3、不支持eval,input,inline等函数
4、不支持的MATLAB的Java接口
脚本文件改写为函数文件
M脚本文件不能直接被MATLAB编译器所编译,解决方案:先把脚本M文件改写成函数M文件,然后再对这函数文件进行编译。
编译器的配置:
在MATLAB命令窗中运行mex –setup
H. MATLAB 编译
M-file里设置端点debug-set/enable breakpoint
然后在主界面的Workspace里有所有变量的值~~
I. 请教关于利用Matlab中“mex”命令编译C程序的问题
1.准备好C语言程序,清楚C语言的入口函数
2.编写mexfunction函数。mexfunction函数为C语言与MATLAB语言的接口函数。调用实例在mylinedetect.c文件中.在MATLAB中调用mex指令编译相关文件,将C语言编译为MEX文件。
3.编译完成后,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用于MATLAB与C语言接口函数.
4.编译完成之后,编写MATLAB函数,调用MEX文件。以MEX文件的形式调用编译完成的C语言函数[o1,o2]=mylinedetect(double(X).');......
5.输出结果,上述linedetect函数完成图像中直线检测功能,带入MATLAB中调用后形成结果。
J. MATLAB程序如何编译产生DLL
把一个简单的m代码编译成C++接口的DLL,然后在C++程序中调用。为了简单起见,这里的C++程序是一个Win32 Console程序,而不是Windows图形界面的程序,不过不妨碍我们的讨论。
下面是这个例子用到的m代码。它定义了一个名为myadd2的函数
function [y,z] = myadd2(a, b)
% mmy function, just to demonstrate the idea
y = a+b;
z = a+2*b;
end
复制代码
首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。具体做法是在MATLAB命令行执行“mbuild -setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:
mcc -W cpplib:libmyadd2 -T link:lib myadd2
复制代码
结果,我们将会得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在内的一些文件。接下来我们只需要这四个文件。
然后在VS2005中创建一个Win32 Console的VC++工程,我在测试时取名为testmyadd2_r2007b。把以上四个文件拷贝到VC++工程的源代码所在目录。
接下来设置VC++,让它能找到MATLAB接口函数的定义及连接库函数。可以有两种设置方式:一种是改VS2005中关于VC++的设置,这样的好处是每个新的工程都能自动获得这个设定;而另一种是只改当前工程的设置,也就是设置只对该工程有效。这里用后一种方式。
在VS2005中打开工程testmyadd2_r2007b,选择菜单“Project-->;Properties,在出来的对话框上,把MATLAB提供的include路径加到VC++的头文件搜索路径。
然后把相应的lib所在目录加到linker的额外搜索路径上
接下来,告诉VC++,我们的这个程序需要连接到另外两个额外的库函数:libmyadd2.lib和mclmcrrt.lib。中间用空格隔开
最后则是程序代码。这个程序只有一个main函数,其完整代码附在下面给大家参考。
#include "stdafx.h"
#include <iostream>
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libmyadd2.h"
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 = 1.0*i;
}
// 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;
a.SetData(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);
// 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;
}
// data from mwArray to C++
y.GetData(yData, 4);
z.GetData(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 << e.what() << std::endl;
}
// terminate the lib
libmyadd2Terminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
