matlab integral积分矩阵维度不一致。

各位好,本人在用integral计算积分时,积分公式中涉及幂次运算,编译的时候一直提示矩阵维度必须一致,由于matlab不熟悉无法定位具体是表达式哪里出现问题,请各位帮忙看看。谢谢!
下面是运行代码以及错误信息
clear
clc
T = 50;
m =1;
t1 = 40;
t = 20;
mu30 = 0.9748;
tau30 = 0.02;
beta1 = 1;
beta2 = 4;
n =10;
tau = 30;
U = t1;
fb = @(z) power(z/(z+2),log(mu30)/log(z/(z+1)))-power(z/(z+1),2*log(mu30)/log(z/(z+1)))-power(tau30,2);
b = double(vpa(solve(fb)))
a = log(mu30)/log(b/(b+1))
xbeta = @(beta) power(t1,beta)+(n-m)*power(T,beta);
fd1 = @(beta) power(beta,m).*power(tau,a*beta).*power(U,beta-1);
fd2 = @(beta) power(xbeta(beta)+b*power(tau,beta),m+a);
Idata = double(vpa(integral(@(beta)fd1(beta)./fd2(beta),beta1,beta2)))
fr1 = @(beta) power(beta,m).*power(tau,a*beta).*power(U,beta-1)
fr2 = @(beta) power(xbeta(beta)+b*power(tau,beta)+power(t,beta),m+a)
r1 = vpa(integral(@(beta)fr1(beta)./fr2(beta),beta1,beta2)/Idata)
fpr1 = 1/(gamma(m+a)*Idata)
fpr2 = @(r) power(log(1./r),m+a-1)./r
fpr3 = @(beta,r) power(beta,m).*power(tau,a*beta).*power(U,beta-1).*power(r,(xbeta(beta)+b*power(tau,beta))/power(t,beta))./power(t,beta*(m+a))
fpr3 = @(r) integral(@(beta) fpr3(beta,r),beta1,beta2)
fpr = @(r) fpr1.*fpr2(r).*fpr3(r)
mu1 = integral(@(r) r.*fpr(r),0,1)
----------------------------------------------------------
错误信息
矩阵维度必须一致。
出错 Untitled5>@(beta,r)power(beta,m).*power(tau,a*beta).*power(U,beta-1).*power(r,(xbeta(beta)+b*power(tau,beta))/power(t,beta))./power(t,beta*(m+a))
出错 Untitled5>@(beta)fpr3(beta,r)
出错 integralCalc/iterateScalarValued (line 323)
fx = FUN(t).*w;
出错 integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
出错 integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
出错 integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
出错 Untitled5>@(r)integral(@(beta)fpr3(beta,r),beta1,beta2)
出错 Untitled5>@(r)fpr1.*fpr2(r).*fpr3(r)
出错 Untitled5>@(r)r.*fpr(r)
出错 integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
出错 integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
出错 integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
出错 integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
出错 Untitled5 (line 29)
mu1 = integral(@(r) r.*fpr(r),0,1)

 Accepted Answer

gcstsuxy
gcstsuxy on 21 May 2023
仅供参考
clear
clc
T = 50;
m =1;
t1 = 40;
t = 20;
mu30 = 0.9748;
tau30 = 0.02;
beta1 = 1;
beta2 = 4;
n =10;
tau = 30;
U = t1;
syms z
fb = power(z/(z+2),log(mu30)/log(z/(z+1)))-power(z/(z+1),2*log(mu30)/log(z/(z+1)))-power(tau30,2);
b = double(vpasolve(fb));
a = log(mu30)/log(b/(b+1));
xbeta = @(beta) power(t1,beta)+(n-m)*power(T,beta);
fd1 = @(beta) power(beta,m).*power(tau,a*beta).*power(U,beta-1);
fd2 = @(beta) power(xbeta(beta)+b*power(tau,beta),m+a);
Idata = double(vpa(integral(@(beta)fd1(beta)./fd2(beta),beta1,beta2)));
fr1 = @(beta) power(beta,m).*power(tau,a*beta).*power(U,beta-1);
fr2 = @(beta) power(xbeta(beta)+b*power(tau,beta)+power(t,beta),m+a);
r1 = vpa(integral(@(beta)fr1(beta)./fr2(beta),beta1,beta2)/Idata);
fpr1 = 1/(gamma(m+a)*Idata);
fpr2 = @(r) power(log(1./r),m+a-1)./r;
fpr3 = @(beta,r) power(beta,m).*power(tau,a*beta).*power(U,beta-1).*power(r,(xbeta(beta)+b*power(tau,beta))/power(t,beta))./power(t,beta*(m+a));
fpr3 = @(r) integral(@(beta) fpr3(beta,r),beta1,beta2);
fpr = @(r) fpr1.*fpr2(r).*fpr3(r);
mu1 = integral(@(r) r.*fpr(r),0,1,'ArrayValued',true)

More Answers (0)

Tags

Asked:

on 21 May 2023

Answered:

on 21 May 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!