| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 347 人关注过本帖
标题:【求指教】拉格朗日插值
取消只看楼主 加入收藏
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
 问题点数:0 回复次数:3 
【求指教】拉格朗日插值
下面是我用C语言编的拉格朗日插值程序,请问各位同仁,红色部分标记的这种间断循环有没有简单一点的处理方式,另外,刚编程序不久,麻烦评价一下,程序有哪些地方可以改进的。感谢哦!

#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
    int i,k,n;
    float a,*x,*y,*l1,*l2,*l,p=0;
    printf("*******  拉格朗日插值程序  *******\n\n\n");
    printf("请输入已知点的个数:");
    scanf("%d",&n);
    x=(float *)malloc(sizeof(float)*n);y=(float *)malloc(sizeof(float)*n);l1=(float *)malloc(sizeof(float)*n);l2=(float *)malloc(sizeof(float)*n);l=(float *)malloc(sizeof(float)*n);
    printf("\n请输入已知点的坐标值,横纵坐标用英文状态下的【逗号】隔开,点与点之间用【空格】隔开:\n");
    for(i=0;i<n;i++)
        scanf("%f,%f",&x[i],&y[i]);
    printf("\n请输入待计算点的横坐标x=");
    scanf("%f",&a);
    for(k=0;k<n;k++)
        {
            l1[k]=l2[k]=1;
            for(i=0;i<k;i++)
                {
                    l1[k]=l1[k]*(a-x[i]);
                    l2[k]=l2[k]*(x[k]-x[i]);
                }
            for(i=k+1;i<n;i++)
                {
                    l1[k]=l1[k]*(a-x[i]);
                    l2[k]=l2[k]*(x[k]-x[i]);
                }
            l[k]=l1[k]/l2[k];
        }
    for(i=0;i<n;i++)
        p=p+l[i]*y[i];
    n=n-1;
    printf("\np%d(%f)=%f即插值点坐标为(%f,%f)\n\n\n",n,a,p,a,p);
    free(x);free(y);free(l1);free(l2);free(l);
    system("pause");
}

[ 本帖最后由 我是来注册的 于 2012-3-30 10:47 编辑 ]
搜索更多相关主题的帖子: include C语言 
2012-03-30 10:45
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
回复 2楼 beyondyf
?我编译运行没问题啊。
2012-03-30 12:47
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
回复 2楼 beyondyf
还有,现在还能修改加分吗?
2012-03-30 12:47
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
都没人回复。。。
2012-03-31 12:49
快速回复:【求指教】拉格朗日插值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019619 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved