高分悬赏——数值逼近的c语言编程题。题目有关插值知识,数学系高材生请进。
求3的根号3次方。利用f(x)=(3的x次方),取节点x=0,x=1,x=-1做插值,并估计截段误差。题目要求:把这道题编成c语言程序,估计只有学过数值逼近的数学系高材生...
求3的根号3次方。
利用f(x)=(3的x次方),取节点x=0,x=1,x=-1做插值,并估计截段误差。
题目要求:把这道题编成c语言程序,估计只有学过数值逼近的数学系高材生才可以编出来。
题目有很强的专业性,会的请出手。
若完成任务再加100分。决不食言。
终于有人响应了,我还以为没有人能遍出来,最好是用拉格朗日的插植方法,如果你觉得不方便也可用其他的方法. 展开
利用f(x)=(3的x次方),取节点x=0,x=1,x=-1做插值,并估计截段误差。
题目要求:把这道题编成c语言程序,估计只有学过数值逼近的数学系高材生才可以编出来。
题目有很强的专业性,会的请出手。
若完成任务再加100分。决不食言。
终于有人响应了,我还以为没有人能遍出来,最好是用拉格朗日的插植方法,如果你觉得不方便也可用其他的方法. 展开
展开全部
你要用什么插值,是牛顿插值,拉格朗日插值,Hermite插值还是三次Hermite插值
说清楚,别让我白忙活
现在才回,我吃饭了再给你写
搞定,不能像你那样说的,选那三个点作插值点,误差太大了,我选了1/5,1/4,1/2这三个点,最后的结果与用pow函数算的只差一点,误差是0.0005(主要是输入的不是很精确,如果足够精确的话,这个误差肯定还要更小.
please enter the number of the node:3
please enter the 1 point:
0.5 1.732
please enter the 2 point:
0.25 1.316
please enter the 3 point:
0.2 1.245731
please enter the test point
0.333333
3^x在0.333333处的值为1.442693:
计算机所算的结果为:1.442197
截断误差为:0.012028
程序如下:
/************************************
拉格朗日插值求3^x处的值
************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct
{
double x,y;
}point;
double Lagrange(point *node,int n,double x)
{
int i,j;
double s1,s2,s=0;
for(i=0;i<n;i++)
{
s1=1;
s2=1;
for(j=0;j<n;j++)
if(i!=j)
s1*=x-node[j].x;
for(j=0;j<n;j++)
if(i!=j)
s2*=node[i].x-node[j].x;
s+=s1/s2*node[i].y;
}
return s;
}
int main()
{
int n,i;
double x;
printf("please enter the number of the node:");
scanf("%d",&n);
point *node=(point *)malloc(n*sizeof(point));
for(i=0;i<n;i++)
{
printf("please enter the %d"" point:\n",i+1);
scanf("%lf%lf",&node[i].x,&node[i].y);
}
printf("please enter the test point\n");
scanf("%lf",&x);
printf("3^x在%lf处的值为%lf:\n",x,Lagrange(node,n,x));
printf("计算机所算的结果为:%lf\n",pow(3,0.3333));
printf("截断误差为:%f\n",0.5*1.732*0.166667*0.083333);
free(node);
return 0;
}
说清楚,别让我白忙活
现在才回,我吃饭了再给你写
搞定,不能像你那样说的,选那三个点作插值点,误差太大了,我选了1/5,1/4,1/2这三个点,最后的结果与用pow函数算的只差一点,误差是0.0005(主要是输入的不是很精确,如果足够精确的话,这个误差肯定还要更小.
please enter the number of the node:3
please enter the 1 point:
0.5 1.732
please enter the 2 point:
0.25 1.316
please enter the 3 point:
0.2 1.245731
please enter the test point
0.333333
3^x在0.333333处的值为1.442693:
计算机所算的结果为:1.442197
截断误差为:0.012028
程序如下:
/************************************
拉格朗日插值求3^x处的值
************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct
{
double x,y;
}point;
double Lagrange(point *node,int n,double x)
{
int i,j;
double s1,s2,s=0;
for(i=0;i<n;i++)
{
s1=1;
s2=1;
for(j=0;j<n;j++)
if(i!=j)
s1*=x-node[j].x;
for(j=0;j<n;j++)
if(i!=j)
s2*=node[i].x-node[j].x;
s+=s1/s2*node[i].y;
}
return s;
}
int main()
{
int n,i;
double x;
printf("please enter the number of the node:");
scanf("%d",&n);
point *node=(point *)malloc(n*sizeof(point));
for(i=0;i<n;i++)
{
printf("please enter the %d"" point:\n",i+1);
scanf("%lf%lf",&node[i].x,&node[i].y);
}
printf("please enter the test point\n");
scanf("%lf",&x);
printf("3^x在%lf处的值为%lf:\n",x,Lagrange(node,n,x));
printf("计算机所算的结果为:%lf\n",pow(3,0.3333));
printf("截断误差为:%f\n",0.5*1.732*0.166667*0.083333);
free(node);
return 0;
}
TableDI
2024-07-18 广告
2024-07-18 广告
仅需3步!不写公式自动完成Excel vlookup表格匹配!Excel在线免,vlookup工具,点击16步自动完成表格匹配,无需手写公式,免费使用!...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询