matlab中如何定义常量
发布网友
发布时间:2022-05-05 10:14
我来回答
共5个回答
热心网友
时间:2022-06-27 08:36
用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);
热心网友
时间:2022-06-27 08:36
还是使用global,比如说想添加一个PII, 值为3.566.
方法1:修改系统文件matlabrc.m(命名时注意不要造成混乱)。
找到你的安装目录下的启动文件matlabrc.m,例如:
C:\matlab\toolbox\local\matlabrc.m
打开,并且在最后一行添加:
global PII;
PII = 3.566;
重启Matlab,输入
>> PII
得到:
PII =
3.5660
但是其实这个PII还是可以改变的,所以另外还有一种复杂点的方法。
方法2:
下载参考资料的链接中的文件,把define那部分文件内容添加到matlabrc.m中;如果需要设定PII = 3.566,再添加如下代码:
global PII;
define PII 3.566;
方法3: '有空飘过的'已经给出了。追问不是,就是在求出来的式子中,保留wa,wm,p这些字母。
热心网友
时间:2022-06-27 08:36
syms x Wa Wm p; %定义符号变量
int(((x-Wa)/(Wm-Wa))^p,x) %求不定积分
热心网友
时间:2022-06-27 08:37
syms x Wa Wm p
int(@(x)((x-Wa)/(Wm-Wa))^p,x)
热心网友
时间:2022-06-27 08:38
你好,请问你这个问题解决了么?我现在也想解决这个问题啊,能指教一下么?不胜感激!