关于C语言编写数值计算的,事关人命啊~~~~
小女子向各位大哥大姐求助,真的事关人命啊,被妈妈逼着选了计算机专业,可是我见了各类程序语言上下眼皮就打架,我知道这类儿科的题目大家都不屑,人说,救人一命,胜造七级浮屠,大哥大姐们帮帮忙,行吗?我需要下面9道题中的6个程序,老师说,考试前不交给他,就取消考试资格,呜呼~~~~~,救命!
将理论算法编写为计算机程序。
1,Gauss(列主元)消去法
2,矩阵三角分解法
3,Lagrange和Newton型插值多项式的计算
4,Hermite型插值函数计算
5,最小二乘方法
6,Romberg方法
7,Euler方法
8,线性方程组的迭代法
9,SOR方法
PS:刚才系统提示我不能放那么多分,那只能到时候另外开帖再给分了:(
问题点数:100、回复次数:13Top
1 楼syx0001(无解的毒药)回复于 2002-06-14 17:43:01 得分 0
我想把所有算法的自然语言都写出来,无奈好多符号都找不到,包括下面的这个“推出”符号,不知道没有自然语言,大家能否写出程序来?
Gauss消去算法的自然语言语言表达
1.输入方程组维数N,增广矩阵系数aij(ij是下标)(i =1,2,…,N;j =1,2…,N+1),控制条件转移精度EPS.
2.对于k ==1,2,…,N-1
2.1A(k,k)推出P,k推出I0 (0是下标)
2.2对于i =k,k+1,…,N,如果
∣A(i,k)∣>∣P∣,则
A(i,k)推出P,k推出I0
2.3如果∣P∣≤EPS,转7
2.4如果I0 =k, 转2.6,否则
2.5对于j=k,…,N+1
A(k,j)推出ω;A(I0,j)推出A(k,j); ω推出A(I0,j)
2.6对于i =k+1,…,N
2.61A(i,k)/A(k,k)推出A(i,k)
2.62对于j=k+1,…,N+1
A(i,j)- A(i,k)* A(k,j)推出A(i,j)
3.如果A(N,N)=0,转7
4.A(N,N+1)/A(N,N)推出A(N,N+1)
5.对于k=N-1,…,2,1
5.1W=0
5.2 对于j=k+1,…,N
W=W+ A(k,j)* A(j,N+1)
5.3 A(k,N+1)-W推出A(k,N+1)
5.4 A(k,N+1)/A(k,k)推出A(k,N+1)
6.输出解xT(T在平方的位置) =(A(1,N+1),A(2,N+1),…,A(N,N+1)).转8
7.输出EXL=1
8.停机
Top
2 楼sun_srh(sun_srh)回复于 2002-06-14 18:02:43 得分 0
<C语言算法大全>上都有,你自己看去吧.
这真是本好书,可惜我买不起!Top
3 楼sun_srh(sun_srh)回复于 2002-06-14 18:05:50 得分 0
<C语言算法大全>里全有.
我想买而买不起的一本书!!!!!!!!!!!!!!!!!!Top
4 楼zhakewei(天外有天)回复于 2002-06-14 18:14:37 得分 0
你到图书馆,仔细的找一找,很多Top
5 楼leopro(漫漫人生路,与你同行)回复于 2002-06-14 18:18:44 得分 0
大部分都不难,但我没时间
而且不喜欢给人写作业!!!Top
6 楼flyaramy(aramy)回复于 2002-06-14 18:53:03 得分 0
慢慢写吧!就是花时间Top
7 楼zhanghaosh(功常越天)回复于 2002-06-14 19:06:54 得分 50
#include "math.h"
#include "malloc.h"
long Seidel(double *AA,double *BA,double *XA,long Xnum,double maxerr,long maxloop)
{
int i,j,loopnum;
double *XB;
if((XB=(double *)malloc(Xnum*sizeof(double)))==0) return(0);
loopnum=0;
do
{
for(i=0;i<Xnum;++i)
*(XB+i)=*(XA+i);
for(i=0;i<Xnum;++i)
{
*(XA+i)=0;
for(j=0;j<Xnum;++j)
*(XA+i)+=*(AA+i*Xnum+j)*(i==j?0:*(XA+j));
*(XA+i)=(*(BA+i)-*(XA+i))/(*(AA+i*Xnum+i));
}
for(i=0,j=0;i<Xnum;++i)
if(fabs(*(XA+i)-*(XB+i))>maxerr) j=1;
loopnum+=1;
}while(loopnum<=maxloop&&j);
return(loopnum<=maxloop);
free(XB);
}
这是一个Seidel迭代的程序,maxloop为最大迭代次数,maxerr为最大误差,Xnum为方程个数,计算AA*XA=BA,请在调用前将XA中赋初值。Top
8 楼zhanghaosh(功常越天)回复于 2002-06-14 19:08:26 得分 0
最后一句写错了,请将free(XB)调到return()之前Top
9 楼iivv(让delphi去死!只要我还活着~~~)回复于 2002-06-14 19:11:04 得分 0
好多高手帮你,我就不行咯Top
10 楼hslinux(幻世龙)回复于 2002-06-14 19:26:22 得分 0
........Top
11 楼tu_ling(凌翔)回复于 2002-06-14 19:30:03 得分 0
小弟也是学生一个
课程设计和你一样马上要交
阿门上帝会保护你的!~~Top
12 楼yausang(杨)回复于 2002-06-16 21:52:56 得分 0
上图书馆借一本c语言算法的书,自己再看看,就ok了。Top
13 楼liushanyu(兵工厂)回复于 2002-06-16 22:13:48 得分 0
自己动手,学习才能提高。Top
14 楼lqtwh(←绝版恐龙)回复于 2002-07-18 16:06:57 得分 50
#include <stdio.h>
#include <malloc.h>
double LagInt(double *xa, double *ya, int n, double x)
{
int i, j;
double p, s;
s=0;
for(i=0; i<=n-1; i++)
{
p=1;
for(j=0; j<=n-1; j++)
if(i != j)
p = p * (x - xa[j]) / (xa[i] - xa[j]);
s = s + p * ya[i];
}
return(s);
}
void main()
{
printf("-----------------------------------------------\n");
printf("|\n");
printf("| 用拉格朗日插值公式, 求指定插值点处的函数值\n");
printf("|\n");
printf("-----------------------------------------------\n\n");
int n;
double *xa, *ya, x;
xa = ya = NULL;
printf("请输入已知插值点个数:");
scanf("%d", &n);
if(n>0)
{
xa = (double *)calloc(n, sizeof(double));
ya = (double *)calloc(n, sizeof(double));
}
if(xa !=NULL && ya != NULL)
{
for(int i=0; i<n; i++)
{
printf("请输入第%d个插值点(x):", i+1);
scanf("%lf", &xa[i]);
printf("请输入第%d个插值点处的函数值(y):", i+1);
scanf("%lf", &ya[i]);
}
printf("请输入待求插值点(x):");
scanf("%d", &x);
printf("待求插值点处的函数值是:%.7f\n", LagInt(xa, ya, n, x));
}
else
{
printf("分配内存时发生错误。\n");
}
free(xa);
free(ya);
}
Top




