|
楼主 |
发表于 2006-9-5 16:12
|
显示全部楼层
哎呀呀!还是提示整数过大啊!
过了这么多天,结果让大家失望了:
还是提示整数过大:(
下面是解方程的子程序:
%方程的求解过程:(求P的未知参数k1 k2 k3)
function [y1,y2,y3]=solveequ0901(At,F)
%At、F为从主程序传到该子程的已知数。
N=6;L=7;h=10;
syms k1 k2 k3
P=[k1;k2;k3;0.0001737*k1;0.0001737*k2;0.0001737*k3;1.0926529];
%=================================================
%解方程:∑[F-∑(As*P)*Aq]=0
for q=1:3
sff2=0;
for r=1:h*N
sff1=0;
for s=1:L
sff1=vpa(sff1+vpa(At(r,s)*P(s),4),4);
%sff1=vpa(sff1,4); %这个vpa到底应该设在哪里呢?
end
sff2=vpa(sff2+vpa((F(r)-sff1)*At(r,q),4),4);
%sff2=vpa(sff2,4);
end
equ5x(q)=sff2;
end
[k1,k2,k3]=solve(equ5x(1),equ5x(2),equ5x(3),'k1','k2','k3');
k1=single(vpa(k1,4));k2=single(vpa(k2,4));k3=single(vpa(k3,4));
P=subs(P,'k1',k1);P=subs(P,'k2',k2);P=subs(P,'k3',k3);
P=single(P);
%==================下面是函数返回值=======================
y1=single(k1);
y2=single(k2);
y3=single(k3);
%我还有一个主程序是调用这个解方程程序的,
%在主程序中也设置了循环调用次数以控制收敛,并为这个解方程的程序提供At、F,
%注意每次从主程序传到该子程时的F都是经过修正的!在主程序中有一句F=k1+a*k2对F进行修正
%另:主程序根据两次调用子程序计算后的k1、k2、k3的差值来控制收敛。
%我昨天主程序循环1000次,正常;今天调整成2000次,结果在第1058次时提示整数过大。
%我都快折腾1个月了!救救我吧! |
|