JLU_ltx 2021-11-09 22:05 采纳率: 100%
浏览 210
已结题

matlab拟合函数求参数报错,Function value and YDATA sizes are not equal.

代码在下边,想用fittype拟合,函数有点复杂,然后报错了,但是实在不知道什么原因了,求解答修改代码

>> clear;
H=20;
p=800;
Rw=9.8;
syms E0 E1 Kv N1 t n;
M=(2*n-1)*pi/2;
a=E1/E0;
b=Kv*N1/(H^2*Rw);
x1=-(M^2*b+a+1-sqrt((M^2*b+a+1)^2-4*a*M^2*b))/(2*b);
x2=-(M^2*b+a+1+sqrt((M^2*b+a+1)^2-4*a*M^2*b))/(2*b);
D1=(M^2+x2)/(x2-x1);
D2=(M^2+x1)/(x2-x1);
Cv=Kv*E0/Rw;
Tv=Cv*t/H^2;
w1=2*(D1*exp(x1*t*Cv/H^2)-D2*exp(x2*t*Cv/H^2))/M^2;
w2=2*(D1*(exp(x1*t*Cv/H^2)-exp(-t*E1/N1))/(x1*Cv/H^2+E1/N1)-D2*(exp(x2*t*Cv/H^2)-exp(-t*E1/N1))/(x2*Cv/H^2+E1/N1))/M^2;
s1=symsum(w1,n,1,10);
s2=symsum(w2,n,1,10);
%S=H*p*((1-s1)/E0+(1-exp(-t*E1/N1))/E1-s2/N1);
X=[1
5.011872336
19.95262315
63.09573445
158.4893192
501.1872336
2511.886432
10000
79432.82347
199526.2315
1000000
1584893.192
5011872.336
7943282.347
15848931.92
19952623.15
25118864.32
50118723.36
63095734.45
100000000
158489319.2
630957344.5
1995262315
12589254118
31622776602
1.58489E+11];
Y=[0.4
0.44
0.5
0.52
0.6
0.7
0.8
1
1.4
1.8
2
2.3
2.8
3.1
3.5
3.8
4
4.3
4.7
4.9
5.4
6.2
7.3
8.2
8.7
9];
f=fittype('H*p*((1-s1/E0+(1-exp(-t*E1/N1))/E1-s2/N1)+Kv*0)','independent','t','coefficients',{'E0','E1','Kv','N1'},'problem',{'H','p','s1','s2'});
[cfun,rsquare]=fit(X,Y,f,'Lower',[0,0,0,0,],'Upper',[10000,10000,9E+08,1],'StartPoint',[2817.12,4582.85,6.98E+07,7.86E-11],'problem',{'H','p','s1','s2'}); 
cfun=fit(X,Y,f,'problem',{'H','p','s1','s2'});
coeffvalues(cfun);
xi=1:10:1000;
yi=cfun(xi);
plot(X,Y,'r*',xi,yi,'b-');

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-11-09 22:34
    关注

    你用匿名函数就行,给你更正如下

    clear;
    H=20;
    p=800;
    Rw=9.8;
    syms E0 E1 Kv N1 t n;
    M=(2*n-1)*pi/2;
    a=E1/E0;
    b=Kv*N1/(H^2*Rw);
    x1=-(M^2*b+a+1-sqrt((M^2*b+a+1)^2-4*a*M^2*b))/(2*b);
    x2=-(M^2*b+a+1+sqrt((M^2*b+a+1)^2-4*a*M^2*b))/(2*b);
    D1=(M^2+x2)/(x2-x1);
    D2=(M^2+x1)/(x2-x1);
    Cv=Kv*E0/Rw;
    Tv=Cv*t/H^2;
    w1=2*(D1*exp(x1*t*Cv/H^2)-D2*exp(x2*t*Cv/H^2))/M^2;
    w2=2*(D1*(exp(x1*t*Cv/H^2)-exp(-t*E1/N1))/(x1*Cv/H^2+E1/N1)-D2*(exp(x2*t*Cv/H^2)-exp(-t*E1/N1))/(x2*Cv/H^2+E1/N1))/M^2;
    s1=symsum(w1,n,1,10);
    s2=symsum(w2,n,1,10);
    %S=H*p*((1-s1)/E0+(1-exp(-t*E1/N1))/E1-s2/N1);
    X=[1
    5.011872336
    19.95262315
    63.09573445
    158.4893192
    501.1872336
    2511.886432
    10000
    79432.82347
    199526.2315
    1000000
    1584893.192
    5011872.336
    7943282.347
    15848931.92
    19952623.15
    25118864.32
    50118723.36
    63095734.45
    100000000
    158489319.2
    630957344.5
    1995262315
    12589254118
    31622776602
    1.58489E+11];
    Y=[0.4
    0.44
    0.5
    0.52
    0.6
    0.7
    0.8
    1
    1.4
    1.8
    2
    2.3
    2.8
    3.1
    3.5
    3.8
    4
    4.3
    4.7
    4.9
    5.4
    6.2
    7.3
    8.2
    8.7
    9];
    ff = H*p*((1-s1/E0+(1-exp(-t*E1/N1))/E1-s2/N1)+Kv*0);
    ff = matlabFunction(ff);
    f=fittype(ff,'independent','t','coefficients',{'E0','E1','Kv','N1'},'dependent','Y');
    [cfun,rsquare]=fit(X,Y,f,'Lower',[0,0,0,0],'Upper',[10000,10000,9E+08,1],'StartPoint',[2817.12,4582.85,6.98E+07,7.86E-11]); 
    % cfun=fit(X,Y,f);
    coeffvalues(cfun);
    xi=(1:10:1000)*1e8;
    yi=cfun(xi);
    plot(X,Y,'r*',xi,yi,'b-');
     
    

    可以调通计算,但是可能你的模型本身有误,拟合效果不好

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月9日

悬赏问题

  • ¥60 Python如何后台操作Vmwake虚拟机键鼠
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容