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

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日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?