设为首页收藏本站

八达网

 找回密码
 注册
查看: 519|回复: 17
打印 上一主题 下一主题

Matlab或者EXCEL高手进。。学术问题。。

[复制链接]

27

主题

1

好友

1万

积分

航母

2013年夜饭

跳转到指定楼层
1
发表于 2010-11-3 06:44 |只看该作者 |倒序浏览
本帖最后由 hpPlayer 于 2010-11-3 06:49 编辑

回家作业有道编程题,可以使用任何的程序编辑。。但是我之前从来没有编过程。。。这不是故意难为我么。。我电脑上只有EXCEL和MATLAB,大家想想办法吧。。。。废话不多说,上题:
一条河流的初始浓度公式已经知道:
C=1/((2*3.14*0.5^2)^0.5)*EXP((-(x-50)^2)/(2*0.5^2))   ‘ X为与原点的距离,范围为0:到100
t+△t时间后,浓度的分布公式已经知道:
C(i)(t+△t)=△t*D/((△x)^2)*(C(i+1)(t)+C(i-1)(t)-2C(i)(t))+C(i)(t)
i=任一点,i+1, 任一点后面一个单位的点,i-1, 任一点前面一个单位的点.
t, 任意时间;△t, 时间的差值,可以任意假设(但是要小于0.08,。。。经验公式所得),我在做题时,为了方便计算,假设△t=0.05;D=0.5;
boundary conditions are zero on both sides.
题目让求10,50,100,200,500s 后的浓度分布公式,用程序形式表达。
我的解法是,算出各个点的初始浓度C,
然后代入到公式2,就可以求出某一点△t=0.5时间后的浓度,
同理求得△t=0.5时间后该点前后点的浓度
如此反复代入,最后就可以求出题目要求时间内的浓度公式。
很明显,这是个循环语句。。。很高深。。我不会编程。。。
哪位高手能帮我。。。谢谢大家了。。悬赏分神马的都是浮云,要多少给多少。。。只求做出这道题。。。

150

主题

3

好友

4万

积分

光明执政官

2
发表于 2010-11-3 06:58 |只看该作者
1000.........
回复

使用道具 举报

54

主题

0

好友

1万

积分

航母

暗黑圣堂

3
发表于 2010-11-3 08:49 |只看该作者
程序已经调试过,可以用。程序必须是英文字母,注释%后面可以写汉字。
matlab是矩阵运算,所以变量乘、除、平方前面加字符“.”,例如*应该写成.*
回复不能加.m的附件,我压缩成了。rar的文件,在附件中。
例子中,取时间t=10,你也可以取别的值(50,100,200,500s),我有事,所以简单的这样编了。
x分点我取了100个,不应该取得太大,否则间距dx太小,第二个方程dx的平方在分母上,会得到很大的值,应该避免。

t=10; % 输入时间t,这里取t=10,t也可以取50,100,200,500s
x=linspace(0,100,99);   % x 范围[0,100],平均分为100个点,改变第三个输入参数99,可以改变分的点数,x如果分得太大,dx太小,浓度计算有问题,自己分析
C=1/((2*3.14*0.5^2)^0.5)*exp((-(x-50).^2)/(2*0.5^2)); %计算x对应的C值,共1000个
C(1)=0;c(1000)=0;  %边界为零
%计算时间t的浓度
dt=0.05;
dx=x(2)-x(1)  %计算x的间距dx
D=0.5;
n=t/dt;
for i=1:n
    for j=2:length(x)-1    %边界为零,只改变除边界的其他值
        C(j)=dt*D/(dx^2)*(C(j+1)+C(j-1)-2*C(j))+C(j);
    end
end
% 输出t时间的浓度值
C,

浓度计算的matlab程序.rar

663 Bytes, 下载次数: 25

菜鸟默默飘过。。。
吃一口辣椒,撸一下管,没办法,这就是我们穷人的生活.......
回复

使用道具 举报

210

主题

0

好友

4万

积分

光明执政官

4
发表于 2010-11-3 08:51 |只看该作者
楼上真有干劲, 不愧是学 tensor 的
I went to the woods because I wished to live deliberately, to front only the essential facts of life, and see if I could not learn what it had to teach, and not, when I came to die, discover that I had not lived.
回复

使用道具 举报

40

主题

1

好友

1万

积分

航母

5
发表于 2010-11-3 08:53 |只看该作者
楼上是高手
回复

使用道具 举报

54

主题

0

好友

1万

积分

航母

暗黑圣堂

6
发表于 2010-11-3 09:05 |只看该作者
把程序中的C(1000)=0,改成C(100)=0,我没注意看,只有100个分点!下面附件是修改过的

浓度计算的matlab程序.rar

667 Bytes, 下载次数: 26

菜鸟默默飘过。。。
吃一口辣椒,撸一下管,没办法,这就是我们穷人的生活.......
回复

使用道具 举报

23

主题

1

好友

2万

积分

大和

7
发表于 2010-11-3 09:27 |只看该作者
niuB...
意识诚可贵;战术价更高;若是够委琐;两者皆可抛!

回复

使用道具 举报

lofi 该用户已被删除
8
发表于 2010-11-3 09:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

11

主题

0

好友

1万

积分

航母

9
发表于 2010-11-3 09:49 |只看该作者
我草,果断进来膜拜程序帝!
你们都说之前的屁股太肥了,没有葫芦形,那算了,不展示屁股了。那股淡淡的熟味,你们不懂,我也不说。
回复

使用道具 举报

11

主题

0

好友

1万

积分

航母

10
发表于 2010-11-3 09:49 |只看该作者
看得我等彩笔一愣一愣的,
犹如当年第一眼看到包哥第一视角时的震惊
你们都说之前的屁股太肥了,没有葫芦形,那算了,不展示屁股了。那股淡淡的熟味,你们不懂,我也不说。
回复

使用道具 举报

74

主题

0

好友

4万

积分

大和

战队
[B.D]=
种族
Protoss
11
发表于 2010-11-3 10:07 |只看该作者
回复

使用道具 举报

lofi 该用户已被删除
12
发表于 2010-11-3 10:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

54

主题

0

好友

1万

积分

航母

暗黑圣堂

13
发表于 2010-11-3 13:11 |只看该作者
tensor同学你那个ij二重循环会不会有点小问题啊,比如你那个C(j)=dt*D/(dx^2)*(C(j+1)+C(j-1)-2*C(j))+C(j)中间,C(j+1)还是t时刻的不是t+dt的。
建议用二维的C(i,j)=C(t+idt,Xj)来表示。
lofi 发表于 2010-11-3 10:16

我当时有急事,没仔细看,谢谢。是有问题,我改改。
菜鸟默默飘过。。。
吃一口辣椒,撸一下管,没办法,这就是我们穷人的生活.......
回复

使用道具 举报

54

主题

0

好友

1万

积分

航母

暗黑圣堂

14
发表于 2010-11-3 14:33 |只看该作者
改正后的程序
%程序开始。要求输入时间 t 和 x 的分的点数 N 。
t=input('请输入时间 t :t = ');
N=input('请输入[0 x]区间均分的段数 N :N = ');
x=linspace(0,100,N);    % x 范围[0,100],平均分为N个点。x如果分得太多,dx太小,浓度计算有问题,自己分析
C=1/((2*3.14*0.5^2)^0.5)*exp((-(x-50).^2)/(2*0.5^2));   %计算x对应的C的初始值
C(1)=0;  c(length(x))=0;  %边界为零
%计算时间t的浓度
dt=0.05;       %时间变化dt
dx=x(2)-x(1);  %计算x的间距dx
D=0.5;
n=t/dt;       %时间的段数
for i=1:n
    temp=C;    %每次计算前,保存C的值,否则影响计算
    for j=2:length(x)-1    %边界为零,只改变除边界的其他值
        C(j)=dt*D/(dx^2)*(temp(j+1)+temp(j-1)-2*temp(j))+temp(j);
    end
end
% 输出t时间的浓度值
fprintf('时间 t = %d 对应的浓度为:',t),
C,

浓度计算的matlab程序.rar

759 Bytes, 下载次数: 22

菜鸟默默飘过。。。
吃一口辣椒,撸一下管,没办法,这就是我们穷人的生活.......
回复

使用道具 举报

6

主题

0

好友

3万

积分

大和

15
发表于 2010-11-3 14:59 |只看该作者
进来观摩编程帝,真威武
将来有问题还是得来8DA
回复

使用道具 举报

0

主题

0

好友

6489

积分

版主

Rank: 7Rank: 7Rank: 7

16
发表于 2010-11-3 15:24 |只看该作者

面瘫痴汉 一统江湖
千秋万代 满塞满塞
回复

使用道具 举报

6

主题

0

好友

7308

积分

大象

17
发表于 2010-11-3 15:34 |只看该作者
万能8达啊,看水晶
回复

使用道具 举报

1003

主题

0

好友

5万

积分

光明执政官

18
发表于 2010-11-3 16:51 |只看该作者
哪个编程语言啊,%竟然是注释用的。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2026-7-29 19:34

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部