C程序-泰勒级数长公式
这个公式是我一个朋友给我的,我给他准备好了。但我似乎不知道如何获得每个角度的正确正弦计算。有人能帮我在罪的部分得到正确的命令吗 代码:C程序-泰勒级数长公式,c,numerical-methods,C,Numerical Methods,这个公式是我一个朋友给我的,我给他准备好了。但我似乎不知道如何获得每个角度的正确正弦计算。有人能帮我在罪的部分得到正确的命令吗 代码: #包括 #定义PI 3.141592653589 #定义\u术语的数量\u 10 双阶乘(双x) { 双计数器,总计; 计数器=x; 总数=x; 而(计数器>1) { 计数器--; 总计=总计*计数器; } 返回总数; } 双功率(双x,双y) { 双计数器,j; 计数器=0; j=x; while(柜台) f2用3初始化,然后在条件部分检查f2是否等于1,返回
#包括
#定义PI 3.141592653589
#定义\u术语的数量\u 10
双阶乘(双x)
{
双计数器,总计;
计数器=x;
总数=x;
而(计数器>1)
{
计数器--;
总计=总计*计数器;
}
返回总数;
}
双功率(双x,双y)
{
双计数器,j;
计数器=0;
j=x;
while(柜台)
f2用3初始化,然后在条件部分检查f2是否等于1,返回false
这个循环甚至没有运行一次。第一次条件为false。所以
fac2*=f2;
永远不会被执行
并且您在下一个循环中都犯了相同的错误。
f2用3初始化,然后在条件部分检查f2是否等于1,返回false
这个循环甚至没有运行一次。第一次条件为false。所以
fac2*=f2;
永远不会被执行
并且您对下一个循环都犯了相同的错误。大多数for循环从未运行过。请检查它们的正确语法。例如:
for(f2=3;f2==1;f2--)
从未执行,因为f2=3和3!=1大多数for循环从未运行。请检查它们的正确语法。例如:
for(f2=3;f2==1;f2--)
#include<stdio.h>
#define PI 3.141592653589
#define NUMBER_OF_TERMS 10
int
main()
{
double angle_degrees, angle_radians;
double sin, i, i2, i3, i4 , i5, i6, i7, i8, i9, i10;
double fac1, fac2, fac3, fac4, fac5, fac6=1, fac7, fac8, fac9, fac10;
double f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
double p1, p2, p3, p4, p5, p6, p7, p8, p9, p10;
for(angle_degrees = -180; angle_degrees <= 180; angle_degrees += 5){
p1 = angle_radians;
p2 = angle_radians;
p3 = angle_radians;
p4 = angle_radians;
p5 = angle_radians;
p6 = angle_radians;
p7 = angle_radians;
p8 = angle_radians;
p9 = angle_radians;
p10 = angle_radians;
angle_radians = angle_degrees*PI/180;
for(f1=3;f1>=1;f1--){
fac1*=f1;
}
for(f2=5;f2>=1;f2--){
fac1*=f2;
}
for(f3=7;f3>=1;f3--){
fac1*=f3;
}
for(f4=9;f4>=1;f4--){
fac1*=f4;
}
for(f5=11;f5>=1;f5--){
fac1*=f5;
}
for(f6=13;f6>=1;f6--){
fac1*=f6;
}
for(f7=15;f7>=1;f7--){
fac1*=f7;
}
for(f8=17;f8>=1;f8--){
fac1*=f8;
}
for(f9=19;f9>=1;f9--){
fac1*=f9;
}
for(f10=21;f10>=1;f10--){
fac1*=f10;
}
sin = angle_radians - (pow(p1, 3)/fac1) + (pow(p2, 5)/fac2) - (pow(p3, 7)/fac3) + (pow(p4, 9)/fac4) - (pow(p5, 11)/fac5) + (pow(p6, 13)/fac6) - (pow(p7, 15)/fac7) + (pow(p8, 17)/fac8) -(pow(p9, 19)/fac9) - (pow(p10, 21)/fac10);
printf ("%.2lf\t\t%.12lf\t\t%.12lf\n",
angle_degrees, angle_radians, sin);
}
}
从不执行,因为f2=3和3!=1
#include<stdio.h>
#define PI 3.141592653589
#define NUMBER_OF_TERMS 10
int
main()
{
double angle_degrees, angle_radians;
double sin, i, i2, i3, i4 , i5, i6, i7, i8, i9, i10;
double fac1, fac2, fac3, fac4, fac5, fac6=1, fac7, fac8, fac9, fac10;
double f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
double p1, p2, p3, p4, p5, p6, p7, p8, p9, p10;
for(angle_degrees = -180; angle_degrees <= 180; angle_degrees += 5){
p1 = angle_radians;
p2 = angle_radians;
p3 = angle_radians;
p4 = angle_radians;
p5 = angle_radians;
p6 = angle_radians;
p7 = angle_radians;
p8 = angle_radians;
p9 = angle_radians;
p10 = angle_radians;
angle_radians = angle_degrees*PI/180;
for(f1=3;f1>=1;f1--){
fac1*=f1;
}
for(f2=5;f2>=1;f2--){
fac1*=f2;
}
for(f3=7;f3>=1;f3--){
fac1*=f3;
}
for(f4=9;f4>=1;f4--){
fac1*=f4;
}
for(f5=11;f5>=1;f5--){
fac1*=f5;
}
for(f6=13;f6>=1;f6--){
fac1*=f6;
}
for(f7=15;f7>=1;f7--){
fac1*=f7;
}
for(f8=17;f8>=1;f8--){
fac1*=f8;
}
for(f9=19;f9>=1;f9--){
fac1*=f9;
}
for(f10=21;f10>=1;f10--){
fac1*=f10;
}
sin = angle_radians - (pow(p1, 3)/fac1) + (pow(p2, 5)/fac2) - (pow(p3, 7)/fac3) + (pow(p4, 9)/fac4) - (pow(p5, 11)/fac5) + (pow(p6, 13)/fac6) - (pow(p7, 15)/fac7) + (pow(p8, 17)/fac8) -(pow(p9, 19)/fac9) - (pow(p10, 21)/fac10);
printf ("%.2lf\t\t%.12lf\t\t%.12lf\n",
angle_degrees, angle_radians, sin);
}
}
#定义PI 3.141592653589
#定义\u术语的数量\u 10
int
main()
{
双角度度,角度弧度;
双正弦,i,i2,i3,i4,i5,i6,i7,i8,i9,i10;
双fac1、fac2、fac3、fac4、fac5、fac6=1、fac7、fac8、fac9、fac10;
双f1、f2、f3、f4、f5、f6、f7、f8、f9、f10;
双p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
对于(角度=-180;角度=1;f1-){
fac1*=f1;
}
对于(f2=5;f2>=1;f2--){
fac1*=f2;
}
对于(f3=7;f3>=1;f3--){
fac1*=f3;
}
对于(f4=9;f4>=1;f4--){
fac1*=f4;
}
对于(f5=11;f5>=1;f5--){
fac1*=f5;
}
对于(f6=13;f6>=1;f6--){
fac1*=f6;
}
对于(f7=15;f7>=1;f7--){
fac1*=f7;
}
对于(f8=17;f8>=1;f8--){
fac1*=f8;
}
对于(f9=19;f9>=1;f9--){
fac1*=f9;
}
对于(f10=21;f10>=1;f10--){
fac1*=f10;
}
sin=角度弧度-(pow(p1,3)/fac1)+(pow(p2,5)/fac2)-(pow(p3,7)/fac3)+(pow(p4,9)/fac4)-(pow(p5,11)/fac5)+(pow(p6,13)/fac6)-(pow(p7,15)/fac7)+(pow(p8,17)/fac8)-(pow(p9,19)/fac9)-(pow(p10,21)/fac10);
printf(“%.2lf\t\t%.12lf\t\t%.12lf\n”,
角度_度、角度_弧度、sin);
}
}
这是一个全新的——我也忘记了这些限制:
1) 除了main()之外,没有其他函数。
2) 没有投入。
3) 角度=双数据。
4) 输出=角度(度数和弧度)、余弦(一旦完成正弦解算,余弦将起作用)和正弦
#定义PI 3.141592653589
#定义\u术语的数量\u 10
int
main()
{
双角度度,角度弧度;
双正弦,i,i2,i3,i4,i5,i6,i7,i8,i9,i10;
双fac1、fac2、fac3、fac4、fac5、fac6=1、fac7、fac8、fac9、fac10;
双f1、f2、f3、f4、f5、f6、f7、f8、f9、f10;
双p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
对于(角度=-180;角度=1;f1-){
fac1*=f1;
}
对于(f2=5;f2>=1;f2--){
fac1*=f2;
}
对于(f3=7;f3>=1;f3--){
fac1*=f3;
}
对于(f4=9;f4>=1;f4--){
fac1*=f4;
}
对于(f5=11;f5>=1;f5--){
fac1*=f5;
}
对于(f6=13;f6>=1;f6--){
fac1*=f6;
}
对于(f7=15;f7>=1;f7--){
fac1*=f7;
}
对于(f8=17;f8>=1;f8--){
fac1*=f8;
}
对于(f9=19;f9>=1;f9--){
fac1*=f9;
}
对于(f10=21;f10>=1;f10--){
fac1*=f10;
}
sin=角度弧度-(pow(p1,3)/fac1)+(pow(p2,5)/fac2)-(pow(p3,7)/fac3)+(pow(p4,9)/fac4)-(pow(p5,11)/fac5)+(pow(p6,13)/fac6)-(pow(p7,15)/fac7)+(pow(p8,17)/fac8)-(pow(p9,19)/fac9)-(pow(p10,21)/fac10);
printf(“%.2lf\t\t%.12lf\t\t%.12lf\n”,
角度_度、角度_弧度、sin);
}
}
这是一个全新的——我也忘记了这些限制:
1) 除了main()之外,没有其他函数。
2) 没有投入。
3) 角度=双数据。
4) 输出=角度(度数和弧度)、余弦(一旦完成正弦解算,余弦将起作用)和正弦。正弦(x)的泰勒级数是x-x^3/3+x^5/5。在您的代码中,我假设p1应该表示x^1=x,p2=x^3。。f1=1!f2=3。现在在结果行中编写
sin = angle_radians - (p1/fac1) + (p2/fac2) + //...
其中的系列符号错误+第一个术语再次出现
sin = (p1/fac1) - (p2/fac2) + //...
而且代码过于复杂。您可以在单个循环中收集结果:
double p=x;
double f=1;
double res=0;
int k=1;
for (int i=0;i<n;i++){
res+=p/f;
p*=-x*x;
k+=2;
f*=(k-1)*k;
}
double p=x;
双f=1;
双res=0;
int k=1;
对于(inti=0;isin(x)的泰勒级数是x-x^3/3!+x^5/5!-…在您的代码中,我假设p1应该表示x^1=x,p2=x^3,…和f1=1!f2=3!…现在在您编写的结果行中
sin = angle_radians - (p1/fac1) + (p2/fac2) + //...
其中的系列符号错误+第一个术语再次出现
sin = (p1/fac1) - (p2/fac2) + //...
此外,代码过于复杂。您可以在单个循环中收集结果:
double p=x;
double f=1;
double res=0;
int k=1;
for (int i=0;i<n;i++){
res+=p/f;
p*=-x*x;
k+=2;
f*=(k-1)*k;
}
double p=x;
双f=1;
双res=0;
int k=1;
for(int i=0;iCode允许任意数量的术语
抄袭
避免重新计算递归函数(如相同参数的幂和阶乘)始终是一个好主意。因此,减少(最少数量的)基本算术运算如下所示:
public static double sine(int terms, double x) {
double result = 1;
double mxx = -x*x;
double addens = 1;
double temp = 2;
for(int n = 2; n <= terms; n++) {
addens *= mxx/temp++/temp++;
result += addens;
}
return x*result;
}
这可以放入一个循环中
res = 1
for( k=num_terms; k-->1;) {
res = 1-x*x*res/(2*k*(2*k+1))
}
res = res*x;
也可以展开循环
res = 1-x*x/42;
res = 1-x*x/20*res;
res = 1-x*x/6*res;
res = x*res;
您可以自由组合x2=x*x
或重命名x=angle\u radians
代码,允许任意数量的术语
抄袭
避免重新计算递归函数,如相同参数的幂和阶乘,这始终是一个好主意(