注册 登录
编程论坛 VB6论坛

matlab 脚本转化成vb

yang9988 发布于 2015-07-01 16:12, 1542 次点击
function [n,x]=sor22(A,b,X,nm,w,ww)
%用超松弛迭代法求解方程组Ax=b
%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w为误差精度,ww为松弛因子
%输出:x为求得的方程组的解构成的列向量,n为迭代次数
n=1;
m=length(A);
D=diag(diag(A));        %令A=D-L-U,计算矩阵D
L=tril(-A)+D;           %令A=D-L-U,计算矩阵L
U=triu(-A)+D;          %令A=D-L-U,计算矩阵U
M=inv(D-ww*L)*((1-ww)*D+ww*U);    %计算迭代矩阵
g=ww*inv(D-ww*L)*b;                %计算迭代格式中的常数项
%下面是迭代过程
while n<=nm
    x=M*X+g;         %用迭代格式进行迭代
    if norm(x-X,'inf')<w
      disp('迭代次数为');n
      disp('方程组的解为');x
      return;
      %上面:达到精度要求就结束程序,输出迭代次数和方程组的解
    end
    X=x;n=n+1;
end
%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)
disp('在最大迭代次数内不收敛!');
disp('最大迭代次数后的结果为');x
上面是完整的超松弛迭代法
 
 
example:
a=[5 2 1;-1 4 2;2 -3 10];
b=[-12; 20; 3;];易错,勿遗漏中间分号,否组矩阵维数错误
c=1000;
d=5e-6;
f=1.03;
k=[0 ;0; 0;];
g=sor22(a,b,k,c,d,f)
13 回复
#2
lianyicq2015-07-01 16:17
用VB求逆矩阵就够你研究了
#3
yang99882015-07-01 16:21
回复 2楼 lianyicq
求思路 一天了。。
#4
lianyicq2015-07-01 16:37
回复 3楼 yang9988
VB6流程和MATLAB一样,但自己要定义一些函数.
矩阵直观的就用2维数组。
对应于你的代码应该有矩阵的加减乘、length、diag、tril、inv、norm。其中inv不太容易做,自己在网上看能不能找到,其它函数都容易实现。
#5
yang99882015-07-01 16:51
回复 4楼 lianyicq
太难了 有没有做好的
#6
lianyicq2015-07-01 16:56
自己找吧,网上不少。你自己只是作一个拼凑的工作而已。
#7
yang99882015-07-01 16:59
回复 6楼 lianyicq
我学的不是vb我学的vs,,基本语法都不会0 0
#8
lianyicq2015-07-01 17:06
如果你用c写出来了,有时间帮你把关键部分转成VB6
#9
yang99882015-07-01 17:09
回复 8楼 lianyicq
明天他们就要用的,,,大神 帮帮忙
#10
lianyicq2015-07-01 17:21
想要达到目的,总得有付出吧。BCCN上倡导交流,互帮互助。不了解没关系,不熟悉也没关系,但总得付出时间吧。
要这样,不知谁能帮上忙。
#11
yang99882015-07-01 17:25
回复 10楼 lianyicq
话说我还是看视频学习c#的小白 面向对象还没学到 实话0 0
#12
yang99882015-07-01 17:34
回复 10楼 lianyicq
我也想写但是我是小白 刚学C# 面向对象还没学 。。。。。。老大 这个真太难了
#13
yang99882015-07-01 17:38
回复 10楼 lianyicq
一个很努力的小白如果在我范围内 我真啥都不说了 我自己码去 可是不在呀 大神们 一下午了 求解脱呀
#14
lianyicq2015-07-01 19:42
本来想找有没有现成的可供VB调用的DLL或API之类的。找到一个的,不支持6.0。
但也可以参考这个,不用花功夫去重写运算函数了。
http://3y.
1