suffer 发表于 2006-10-11 09:15

共轭梯度法的matlab源程序

function g=conjugate_grad_2d(x0,t)
%please input this:conjugate_grad_2d(,0.05)
x=x0;
syms xi yi a
f=xi^2-xi*yi+3*yi^2;
fx=diff(f,xi);
fy=diff(f,yi);
fx=subs(fx,{xi,yi},x0);
fy=subs(fy,{xi,yi},x0);
fi=;
count=0;
while double(sqrt(fx^2+fy^2))>t
s=-fi;
if count<=0
s=-fi;
else
s=s1;
end
x=x+a*s;
f=subs(f,{xi,yi},x);
f1=diff(f);
f1=solve(f1);
if f1~=0
ai=double(f1);
else
break
x,f=subs(f,{xi,yi},x),count
end
x=subs(x,a,ai);
f=xi^2-xi*yi+3*yi^2;
fxi=diff(f,xi);
fyi=diff(f,yi);
fxi=subs(fxi,{xi,yi},x);
fyi=subs(fyi,{xi,yi},x);
fii=;
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s;
count=count+1;
fx=fxi;
fy=fyi;
end
x,f=subs(f,{xi,yi},x),count

本程序由tammy友情提供

bainhome 发表于 2006-10-15 23:40

这段代码是我编的吧,函数名称命名风格一看就是自己...^_^
当时刚学没几天,代码里大段大段的都是符号工具箱里的函数,运行慢得要死要活。
怎么给传出来的?好像从来没有发过的啊(because this code is sucks!!),迷惑...

[ 本帖最后由 bainhome 于 2006-10-16 00:32 编辑 ]

suffer 发表于 2006-10-20 15:06

原帖由 bainhome 于 2006-10-15 23:40 发表
这段代码是我编的吧,函数名称命名风格一看就是自己...^_^
当时刚学没几天,代码里大段大段的都是符号工具箱里的函数,运行慢得要死要活。
怎么给传出来的?好像从来没有发过的啊(because this code is sucks! ...


不知道怎么传出来的,好坏没关系,大家共同探讨嘛

coldspring 发表于 2006-11-11 21:23

不能运行

coldspring 发表于 2006-11-11 23:14

楼主 帮忙给编一个

正定二次函数(至少是4元函数);一个非二次函数(至少是5元函数)。

谢谢诶

bainhome 发表于 2006-11-12 01:05

不能运行
I said this programm sucks,but that didn't means it can't run,base on what makes you say that???
>> conjugate_grad_2d(,0.05)
x =
   0   0
f =
   0
count =
   2

suffer 发表于 2006-11-13 10:26

原帖由 coldspring 于 2006-11-11 21:23 发表
不能运行

可能是matlab版本问题,把错误信息贴出来

coldspring 发表于 2006-11-20 12:00

不能运行


The expression to the left of the equals sign is not a valid target for an assignment

[ 本帖最后由 coldspring 于 2006-11-20 12:01 编辑 ]

bjydly 发表于 2006-11-21 14:59

偶也试了,确实不能运行。。。

suffer 发表于 2006-11-22 10:16

程序没什么问题,是你们使用的问题

bainhome 发表于 2006-11-22 15:06

sign...说几句重一点儿的话:
脖子上面大家都是一个脑子,为什么那么多的人想吃现成饭...最简单最基本的程序调试工作都不愿意做,顺手牵羊从网上弄来的程序就要求必须能完全嵌套在自己的问题里运行,可能吗?
还有,这个共轭梯度法的程序我当时是编写用于教学演示的,并没有考虑速度和通用性的方面,所以从使用角度而言,作为作者本人,我自己的评价是——代码垃圾!
但是这并不代表程序不能运行,我刚才看了看网上贴的这个版本和我自己原来存储的版本,除一处不同之外所有地方都一样,英文出错信息写得那么清楚,居然不愿意自己去调试!
把第一行的:function g=conjugate_grad_2d(x0,t)
改成:function f=conjugate_grad_2d(x0,t)
动一个字母,一切ok!有发帖子敲字的时间,这种问题早解决800遍了,这两天看coldspring到处发贴求类似的优化源程序,一个电影的名字,最能表达我的感想:《一声叹息》...
个人感觉像这种问题自己翻书早就编出来了,而且肯定要比我写的这个好,因为当时我写这个程序也就学了一两个月MATLAB而已。你当然会写的更好,与其看我的代码垃圾,不如写你自己的原创精品!坦白地说,这也是我不大愿意在振动的MATLAB版发贴的原因(别的板块我不太清楚也没发言权):不动脑子问问题的人太多,真正讨论问题的人太少,看着每天帖子一把抓热闹得了不得,动辄数目100以上简直花团锦簇。恕我直言:半数都是半途而废不了了之的垃圾和重复的网络授课。这个毛病不改,振动屯再多的资料,档次还是上不去!
话说得有点儿重,版主如果觉得不对,请删除,谢谢!

suffer 发表于 2006-11-25 11:08

原帖由 bainhome 于 2006-11-22 15:06 发表
sign...说几句重一点儿的话:
脖子上面大家都是一个脑子,为什么那么多的人想吃现成饭...最简单最基本的程序调试工作都不愿意做,顺手牵羊从网上弄来的程序就要求必须能完全嵌套在自己的问题里运行,可能吗?
还 ...

很同意bainhome的观点
不过话说回来你所说的现象不仅仅是某一个地方的问题,目前中国学术界普遍存在这样的问题
过于浮躁,什么都想要现成的!

遍地都是研究生?但是真会研究的又有几个人?别说研究了就算自己会考虑问题的吧,也不多!
我们老师曾经比较有感概的说过,就能力而言现在的研究生不如五六年前的本科生
页: [1]
查看完整版本: 共轭梯度法的matlab源程序