当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 12:53 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
#include<stdio.h>
int main(void)
{
int i,max=1000;
float epsi=0.000001,x[3],y[3],a[4],b[4],c[4];
printf("形如a1x1+a2x2+a3x3=a4\n b1x1+b2x2+b3x3=b4\n c1x1+c2x2+c3x3=c4\n");
printf("请输入系数");
for(i=0;i<4;i++)
{
scanf("%f",&a[i]);
}

for(i=0;i<4;i++)
{
scanf("%f",&b[i]);
}

for(i=0;i<4;i++)
{
scanf("%f",&c[i]);
}
for(i=0;i<3;i++)
{
scanf("%f",&x[i]);
y[i]=x[i];
}
for(i=1;i<=max;i++)
{
x[0]=-a[1]/a[0]*x[1]-a[2]/a[0]*x[2]+a[3]/a[0];
x[1]=-b[0]/b[1]*x[0]-b[2]/b[1]*x[2]+b[3]/b[1];
x[2]=-c[0]/c[2]*x[0]-c[1]/c[2]*x[1]+c[3]/c[2];
if((x[0]-y[0])<epsi&&(x[1]-y[1])<epsi&&(x[2]-y[2])<epsi)
printf("x1=%f x2=%f x3=%f ",x[0],x[1],x[2]);
else
{
for(i=0;i<3;i++)
y[i]=x[i];
}
if(i==max)
printf("发散");
}
return(0);
}
以上是我用c编的一个三元一次方程组的数值解法,用的是高斯迭代,有些地方不够完善,有待改进,不过我现在的疑问是:
开头的几个循环是输入系数,不过我运行的时候一直让我输入,明明系数几经满了,还在让我输入。。。。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 13:55 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
问题解决了,嘿嘿,我刚开始认为是程序的问题,原来是我写的程序不够好,导致运行出错,哈哈 :em04


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 17:44 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
#include<stdio.h>
int main(void)
{
int i,max=10;
float epsi=0.000001,x[3],y[3],a[4],b[4],c[4];
printf("形如a1x1+a2x2+a3x3=a4\n b1x1+b2x2+b3x3=b4\n c1x1+c2x2+c3x3=c4\n");
printf("请输入系数\n");
for(i=0;i<4;i++)
{
scanf("%f",&a[i]);
}

for(i=0;i<4;i++)
{
scanf("%f",&b[i]);
}

for(i=0;i<4;i++)
{
scanf("%f",&c[i]);
}
printf("请赋初值");
for(i=0;i<3;i++)
{
scanf("%f",&x[i]);
y[i]=x[i];
}
printf("输入完毕,请等候\n");
for(i=1;i<max;i=i+1)
{
x[0]=-a[1]/a[0]*x[1]-a[2]/a[0]*x[2]+a[3]/a[0];
x[1]=-b[0]/b[1]*x[0]-b[2]/b[1]*x[2]+b[3]/b[1];
x[2]=-c[0]/c[2]*x[0]-c[1]/c[2]*x[1]+c[3]/c[2];
if((x[0]-y[0])<epsi&&(x[1]-y[1])<epsi&&(x[2]-y[2])<epsi)
{
printf("x1=%f x2=%f x3=%f \n",x[0],x[1],x[2]);
break;
}
else
{
for(i=0;i<3;i++)
y[i]=x[i];
}
if(i==max)
{
printf("发散");
}
}
return(0);
}
改进了一下,收敛得方程可以显示解了,不过发散怎么也不行,改过很多次,但还是不行,各位大虾帮帮我 :em06


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 17:53 
头像

注册: 2011-06-07 14:20
帖子: 3866
系统: Mint18
送出感谢: 17
接收感谢: 65
这东西,matlab搞定 :em04


_________________
wiki: ubuntu 技巧


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 18:15 

注册: 2013-03-20 17:08
帖子: 1
系统: ubuntu
送出感谢: 0 次
接收感谢: 0 次
Matlab几句话搞定,比这好弄多。 :em05


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 18:41 
头像

注册: 2010-10-07 14:23
帖子: 33999
地址: 某系某星某洲某国某省某市
系统: Archdows10
送出感谢: 29
接收感谢: 151
建议使用牛顿下山迭代,用C大才小用了。。。


_________________
心似浮云常自在,意如流水任东西。
此事背后一定有个天大的咪咪
广告:
1、走过路过,不要错过,dropbox网盘2.25G大放送
py大法好,退C保平安
java多妖孽,VB本异端
日诵一千遍,快活似神仙


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 20:51 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
b33e 写道:
这东西,matlab搞定 :em04

嗯嗯,我知道那东西强,不过我的目的并不是要解方程,一是对计算方法的理解,二是对c的训练 :em09


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 20:54 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
月下叹逍遥 写道:
建议使用牛顿下山迭代,用C大才小用了。。。

牛顿下山要求导,通用性不好,我只是想自己编程实现一些常用算法,你能帮帮我看下哪里不足吗?我的现在的问题是:收敛的方程可以输出解,发散的就一直在算,不能输出“发散”,我觉得好像逻辑没有错啊 :em20


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 21:43 
头像

注册: 2008-09-13 19:17
帖子: 7789
系统: Arch Linux (x86_64)
送出感谢: 10
接收感谢: 77
for(i=0;i<3;i++)
y[i]=x[i];

指标重复了吧

目测 if (i==max) 这段要放到那个 for 循环外边。缩进一下就看出来了。


_________________
博客:http://www.lainme.com


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 小生编了个数值程序,求教
帖子发表于 : 2013-03-21 21:52 

注册: 2012-12-16 15:43
帖子: 2074
系统: debian
送出感谢: 8
接收感谢: 28
lainme 写道:
for(i=0;i<3;i++)
y[i]=x[i];

指标重复了吧

目测 if (i==max) 这段要放到那个 for 循环外边。缩进一下就看出来了。

对哦,i重复了,我去修改下试试,谢谢 :em11


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译