简单迭代法、牛顿迭代法、Aitken加速迭代法 C++代码参考

1、简单迭代法:

参考代码:

#include<stdio.h>
#include<math.h>
#define x0 3//初值
#define MAXREPT 1000//迭代次数
#define EPS 0.5E-6//精度
#define G(x) pow(sin(x)+12*x-1,1.0/3)//你的迭代函数;将原方程化为x=G(x)。
int main()
{
	int i;
	double x_k=x0,x_k1=x0;
	printf("	k	xk\n");
	for(i=0;i<MAXREPT;i++)
	{
		printf("	%d	%g\n",i,x_k1);
		x_k1=G(x_k);
		if(fabs(x_k1-x_k)<EPS)
		{
			printf("The Root is x=%g,k=%d\n",x_k1,i);
			return 0;
		}
		x_k=x_k1;
	}
	printf("After %d repeate,no solved.\n",MAXREPT);
	return 0;
}

样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3sinx12x+1

样例结果:
简单迭代法结果
2、牛顿迭代法:

参考代码:

#include<stdio.h>
#include<math.h>
#define G(x) x-(x*x*x-sin(x)-12*x+1)/(3*x*x-cos(x)-12) // 迭代函数,G(x)=x-f(x)/f'(x)
#define MAXREPT 1000// 迭代次数
#define EPS 0.5E-6// 精度
#define x0 3// 初值
int main()
{
	int i;
	double x_k=x0,x_k1=x0;
	printf("	k	xk\n");
	for(int i=0;i<MAXREPT;i++)
	{
		printf("	%d	%g\n",i,x_k1);
		x_k1=G(x_k);
		if(fabs(x_k1-x_k)<EPS)
		{
			printf("The Root is x=%g,k=%d\n",x_k1,i);
			double ans=f(x_k1);
			printf("%g\n",ans);
			return 0;
		}
		x_k=x_k1;
	}
	printf("After %d repeate,no solved.\n",MAXREPT);
	
	return 0;
}

样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3sinx12x+1

样例结果:
牛顿迭代法结果
3、Aitken加速迭代法

参考代码:

#include<stdio.h>
#include<math.h>
#define x0 3// 初值
#define MAXREPT 1000// 迭代次数
#define EPS 0.5E-6// 精度
#define G(x) pow(sin(x)+12*x-1,1.0/3)// 迭代函数,将原方程化为x=G(x)
int main()
{
	int i;
	double x1=x0,x2=x0;
	double y,z;
	printf("	k	xk\n");
	for(i=0;i<MAXREPT;i++)
	{
		printf("	%d	%g\n",i,x2);
		y=G(x1);
		z=G(y);
		x2=z-((z-y)*(z-y))/(z-2*y+x1);
		if(fabs(x2-x1)<EPS)
		{
			printf("The Root is x=%g,k=%d\n",x2,i);
			return 0;
		}
		x1=x2;
	}
	printf("After %d repeate,no solved.\n",MAXREPT);
	return 0;
}

样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3sinx12x+1

样例结果:
Aitken迭代法结果

为了计算函数x^x-(sinx)^x的导数,我们先对该函数取对数,即ln(x^x-(sinx)^x)。然后利用链式法则和基本的求导法则进行计算。 首先对函数x^x-(sinx)^x取对数,得到ln(x^x-(sinx)^x)。 然后对ln(x^x-(sinx)^x)进行求导,利用链式法则和基本的求导法则。 根据链式法则,导数等于外函数的导数乘以内函数的导数。对于外函数ln(u),导数为1/u,其中u为内函数。 根据基本的求导法则,对于x^x的导数,可以使用指数函数的导数法则,即x^x的导数为x^x(lnx+1)。 对于-(sinx)^x的导数,我们可以使用指数函数的导数法则和复合函数的导数法则。首先,对于指数函数的导数法则,得到-x^x(lnsinx)。然后,对于复合函数的导数法则,导数等于外函数对内函数的导数乘以内函数的导数。对于外函数-x^x,使用指数函数的导数法则,得到-x^x(lnx+1)。对于内函数sinx,导数为cosx。 综上所述,函数x^x-(sinx)^x的导数为: (x^x(lnx+1)) - (x^x(lnsinx)cosx) 因此,x^x-(sinx)^x的导数为(x^x(lnx+1))-(x^x(lnsinx)cosx)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [无穷积分 ∫e^(-x^2)dx 的几种巧妙解法](https://blog.csdn.net/zhouchangyu1221/article/details/104178387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值