matlab 定义常量 MATLAB里面怎么定义符号常量?

matlab\u600e\u4e48\u5b9a\u4e49\u5e38\u91cf\uff1f

\u7528nlinfit(x,y,@fun,beta)
\u53ea\u80fd\u8ba9\u51fd\u6570\u6709\u4e24\u4e2a\u8f93\u5165fun\uff08beta\uff0cx\uff09
\u5176\u4e2dbeta\u662f\u53c2\u6570\uff0cx\u662f\u81ea\u53d8\u91cf
\u5982\u679cfun\u6709\u591a\u4e8e\u4e24\u4e2a\u7684\u53d8\u91cf\uff0c\u7b2c\u4e09\u4e2a\u53d8\u91cf\u5c31\u4e0d\u80fd\u901a\u8fc7\u8c03\u7528nlinfit\u4f20\u9012\u7ed9fun
\u7ed3\u679c\u62a5\u9519\u4f60\u7684inline
function\u8f93\u5165\u53c2\u6570\u6570\u91cf\u4e0d\u8db3\u3002
\u800cz\u4e5f\u4e0d\u80fd\u4f5c\u4e3abeta\uff083\uff09\u4f20\u8fdb\u53bb\uff0c\u56e0\u4e3a\u62df\u5408\u8fc7\u7a0b\u4f1a\u6539\u53d8\u4ed6\u7684\u503c\uff0c\u6700\u7eb5\u4e0d\u80fd\u8d77\u5230\u56fa\u5b9a\u5e38\u6570\u7684\u4f5c\u7528
\u4e0d\u8fc7\u6211\u4eec\u8fd8\u662f\u6709\u529e\u6cd5\u7684\uff0c\u628a\u9700\u8981\u7684\u989d\u5916\u4e0d\u53c2\u4e0e\u62df\u5408\u7684\u53c2\u6570\u901a\u8fc7x\u4f20\u7ed9fun
\u56e0\u4e3anlinfit\u4e0d\u7406x\u548cy\u5177\u4f53\u6709\u591a\u5c11\u4e2a\u503c\uff0c\u53ea\u8981\u628ax\u4f20\u9012\u7ed9fun\uff0c\u80fd\u591f\u5f97\u5230\u957f\u5ea6\u548cy\u76f8\u540c\u7684\u6570\u5217\u5c31\u53ef\u4ee5
\u6240\u4ee5\uff0c\u4f60\u8981\u5b9e\u73b0\u7684\u529f\u80fd\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u7a0b\u5e8f\u5b9e\u73b0
x=[1,2,3,4,5];
y=[7,16,31,0,79];
z=2;
x=[x
z];
myfunc=inline('beta(2)+beta(1).*x(1:end-1).*x(end)','beta','x');
beta=nlinfit(x,y,myfunc,[10,0.1]);
a=beta(1);b=beta(2);
\u5c06z\u585e\u5230x\u5c41\u80a1\u540e\u9762\uff0c\u4ecex\u4f20\u9012\u7ed9myfunc\uff0cx\u53d8\u4e3a[1,2,3,4,5,2];
\u4f46\u662f\u8981\u6ce8\u610f\u5728\u51fd\u6570\u5185\u90e8x\u7684\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u4f5c\u4e3az\uff0c\u524d\u9762\u76845\u4e2a\u5143\u7d20\u53c2\u4e0e\u8fd0\u7b97
\u90a3\u6837myfunc\u7684\u8ba1\u7b97\u7ed3\u679c\u4ecd\u7136\u662f\u548cy\u5e8f\u5217\u7b49\u957f\u76845\u4e2a\u6570
\u987a\u4fbf\u8bb2\u53e5\uff0c\u5176\u5b9e\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u7684\u529e\u6cd5\u5b9e\u9a8c\u4e8c\u7ef4\u66f2\u9762\u7684\u62df\u5408
\u8bbe\u73b0\u6709\u4e09\u7ec4\u7b49\u957f\u5217\u5411\u91cf\u5bf9\u5e94\u4e8c\u7ef4\u66f2\u9762\u7684x\uff0cy\uff0cz\u5750\u6807
x=[x1
x2
......
xn]';
y=[y1
y2
......
yn]';
z=[z1
z2
......
zn]';
\u8981\u62df\u5408\u4e3a\u66f2\u7ebf\u65b9\u7a0bz=f(beta,x,y),\u5176\u4e2dbeta\u662f\u53c2\u6570\uff0cx\uff0cy\u662f\u4e24\u4e2a\u8f93\u5165
\u4ee5\u4e8c\u7ef4\u65cb\u8f6c\u5bf9\u79f0\u9ad8\u65af\u66f2\u9762\u4e3a\u4f8b\u5b50z=A*exp((x^2+y^2)/B^2)+C
\u53ef\u4ee5\u8fd9\u6837\u64cd\u4f5c
X=[x
y];
Y=z;
f=inline('beta(1)+exp((X(:,1).^2+X(:,2).^2)./beta(2)^2)+beta(3)','beta','X');
beta=nlinfit(X,Y,f,beta0);
%\u53c2\u6570\u7684\u521d\u59cb\u503cbeta0
A=beta(1);B=beta(2);C=beta(3);

\u4f7f\u7528sym\u51fd\u6570\u5b9a\u4e49\u7b26\u53f7\u53d8\u91cf\u548c\u7b26\u53f7\u8868\u8fbe\u5f0f \uff0c\u5e38\u91cf\u4e0d\u6e05\u695a
\u4e3e\u4e2a\u4f8b\u5b50\uff1a
>> syms x f a
>> a = x + 1;
>> f = 2 * a

f =

2*x + 2

>> subs(f, x, 1)

ans =

4
\u7b26\u53f7\u51fd\u6570\u64cd\u4f5c\uff0c\u7b26\u53f7\u53d8\u91cf\u5b9a\u4e49\uff0c\u7b26\u53f7\u5e38\u91cf\u4f7f\u7528\u4e00\u5e2e\u662fsubs\u7684\u5f62\u5f0f

用nlinfit(x,y,@fun,beta) 只能让函数有两个输入fun(beta,x)

其中beta是参数,x是自变量
如果fun有多于两个的变量,第三个变量就不能通过调用nlinfit传递给fun
结果报错你的inline function输入参数数量不足。

而z也不能作为beta(3)传进去,因为拟合过程会改变他的值,最纵不能起到固定常数的作用

不过我们还是有办法的,把需要的额外不参与拟合的参数通过x传给fun
因为nlinfit不理x和y具体有多少个值,只要把x传递给fun,能够得到长度和y相同的数列就可以
所以,你要实现的功能可以通过以下程序实现

x=[1,2,3,4,5];
y=[7,16,31,0,79];
z=2;
x=[x z];
myfunc=inline('beta(2)+beta(1).*x(1:end-1).*x(end)','beta','x');
beta=nlinfit(x,y,myfunc,[10,0.1]);
a=beta(1);b=beta(2);

将z塞到x屁股后面,从x传递给myfunc,x变为[1,2,3,4,5,2];
但是要注意在函数内部x的最后一个元素作为z,前面的5个元素参与运算
那样myfunc的计算结果仍然是和y序列等长的5个数

顺便讲句,其实可以通过这样的办法实验二维曲面的拟合
设现有三组等长列向量对应二维曲面的x,y,z坐标
x=[x1 x2 ...... xn]';
y=[y1 y2 ...... yn]';
z=[z1 z2 ...... zn]';
要拟合为曲线方程z=f(beta,x,y),其中beta是参数,x,y是两个输入
以二维旋转对称高斯曲面为例子z=A*exp((x^2+y^2)/B^2)+C

可以这样操作
X=[x y];
Y=z;
f=inline('beta(1)+exp((X(:,1).^2+X(:,2).^2)./beta(2)^2)+beta(3)','beta','X');
beta=nlinfit(X,Y,f,beta0); %参数的初始值beta0
A=beta(1);B=beta(2);C=beta(3);

扩展阅读:中国哪些高校matlab被禁 ... matlab如何定义字母 ... matlab定义函数function ... matlab未定义函数或变量 ... matlab中如何表示a为常数 ... matlab设定的常量有哪些 ... matlab 怎么令a为常数 ... matlab函数定义和调用 ... matlab定义字母为任意常数 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网