勒讓德多項式
題目描述:
編一個程式,輸入x、n,計算勒讓德(Legendre)多項式的第 n 項。
輸入:一個浮點數和一個整數,分別對應x和n(0<=n<=20)。
輸出:一個浮點數,即勒讓德多項式第n項的值,注意小數點后保留到第2位。
樣例1:
輸入:3.4 2
輸出:16.84
樣例2:
輸入:3.4 10
輸出:30143685.82
樣例3:
輸入:3.4 21
輸出:23525972077722828.00
#include<stdio.h>
#define N 90
double fuxc(double x, int n) {
int i;
double f[N],s;
if (n == 0) {
s = 1;
}
if (n == 1) {
s = x;
}
if (n > 1) {
f[0] = 0;
f[1] = x;
for (i = 2;i <= n;i++) {
f[i] = (2.0 * i - 1)*1.0 / i * x * f[i - 1] - (i * - 1)*1.0 / i * f[i - 2];
}
s = f[n];
}
return s;
}
int main() {
double x,z;
int n;
scanf("%lf %d", &x, &n);
z = fuxc(x, n);
printf("%.2lf", z);
return 0;
}
uj5u.com熱心網友回復:
沒語法錯誤,肯定是邏輯錯誤。你也沒貼出來多項式是什么樣子的,誰能幫你???
uj5u.com熱心網友回復:
f[0]=0; 改成 f[0]=1;否則
i*f[i-2]就發生除以0錯誤了
uj5u.com熱心網友回復:
你給出勒讓德多項式的定義uj5u.com熱心網友回復:
樓主應該是想寫遞回的演算法,修改如下,供參考:#include<stdio.h>
double fuxc(double x,int n)
{
double s;
if(n==0)
return 1;
else if(n==1)
return x;
else
{
s=((2*n-1)*x* fuxc(x,n-1) -(n-1)* fuxc(x,n-2))/n*1.0;
return s;
}
}
int main(int argc, char* argv[])
{
double x,z;
int n;
scanf("%lf %d", &x, &n);
z = fuxc(x, n);
printf("%.2lf\n", z);
system("pause");
return 0;
}
uj5u.com熱心網友回復:
#include<stdio.h>#define N 90
double fuxc(double x, int n)
{
int i;
double f[N],s;
if (n == 0)
{
s = 1;
}
if (n == 1)
{
s = x;
}
if(n>1)
{
f[0] = 1;
f[1] = x;
for(i=2;i<=n;i++)
{
f[i]=(2.0*i-1)/i*x*f[i-1]-(i-1)/i*f[i-2];
}
s = f[n];
}
return s;
}
int main()
{
double x,z;
int n;
scanf("%lf %d", &x,&n);
z=fuxc(x, n);
printf("%.2lf", z);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227424.html
標籤:C語言
上一篇:大佬幫下忙
下一篇:mfc動態的畫出軌跡
