UVA 10428 - The Roots

option=com_onlinejudge&Itemid=8&page=show_problem&category=494&problem=1369&mosmsg=Submission+received+with+ID+13941229" target="_blank" style="">题目链接

题意:给定一个一元多次方程组,要求求出全部根

思路:利用牛顿迭代法 xn+1=xnf(xn)/f′(xn),不断迭代就能求出较为精确的值,然后因为有的方程可能有多解,每次解得一个X后,就把原式子除以(x
- X),这个是肯定能整除的。把方程降阶然后继续用牛顿迭代法直到求出全部解

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; const int N = 10;
int n;
double a[N]; double cal(double *f, double x, int n) {
double ans = 0;
for (int i = 0; i <= n; i++)
ans += f[i] * pow(x, i);
return ans;
} double newton(double *f, int n) {
double fd[N];
for (int i = 0; i < n; i++)
fd[i] = f[i + 1] * (i + 1);
double x = -25.0;
for (int i = 0; i < 100; i++)
x = x - cal(f, x, n) / cal(fd, x, n - 1);
return x;
} void tra(double *f, double x, int n) {
f[n + 1] = 0;
for (int i = n; i > 0; i--)
f[i] = f[i + 1] * x + f[i];
for (int i = 0; i < n; i++)
f[i] = f[i + 1];
} void solve() {
for (int i = 0; i < n; i++) {
double x = newton(a, n - i);
printf(" %.4lf", x);
tra(a, x, n - i);
}
} int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
for (int i = n; i >= 0; i--)
scanf("%lf", &a[i]);
printf("Equation %d:", ++cas);
solve();
printf("\n");
}
return 0;
}

UVA 10428 - The Roots(牛顿迭代法)的更多相关文章

  1. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  2. Atitit 迭代法  “二分法”和“牛顿迭代法 attilax总结

    Atitit 迭代法  "二分法"和"牛顿迭代法 attilax总结 1.1. ."二分法"和"牛顿迭代法"属于近似迭代法1 1. ...

  3. 牛顿迭代法实现平方根函数sqrt

    转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...

  4. sqrt (x) 牛顿迭代法

    参考: 0开方 是 0 1的开方式 1 2的开方式 1.4 3.的开方=(1.4+3/1.4)/2 牛顿迭代法:学习自 http://blog.csdn.net/youwuwei2012/articl ...

  5. 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根

    问题描述 给定三次函数f(x)=ax3+bx2+cx+d的4个系数a,b,c,d,以及一个数z,请用牛顿迭代法求出函数f(x)=0在z附近的根,并给出迭代所需要次数. 牛顿迭代法的原理如下(参考下图) ...

  6. 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法

      题目

  7. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  8. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.但是,这一方法在牛顿生前并未公开发表. 牛顿法的作用是使用迭代的方法来求解函数方程的根. ...

  9. sqrt()平方根计算函数的实现2——牛顿迭代法

    牛顿迭代法: 牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特 ...

随机推荐

  1. .NET CMS系统--pageAdmin 模板样式设置

    修改方法: 表单模型管理 - 数据表管理 - 模型管理 修改产品详情页

  2. AC日记——[Ahoi2009]Seq 维护序列seq bzoj 1798

    1798 思路: 维护两个标记: 乘:m  和  加:a 先下放乘,再下放加: 下放乘的时候要把子节点的加一块乘了: 开long long: 来,上代码: #include <cstdio> ...

  3. vuex 表单字段映射工具 vuex-map-fields

    vuex在处理表单的时候显得很麻烦,要一个字段一个字段的去写set和get还有mutation,字段多的话带来的工作量将是非常巨大的.vuex-map-fields将能很好的解决这个问题. vuex- ...

  4. Splitting Pile --AtCoder

    题目描述 Snuke and Raccoon have a heap of N cards. The i-th card from the top has the integer ai written ...

  5. PostgreSQL 10.0 preview 功能增强

    https://yq.aliyun.com/users/1384833841157402?spm=5176.100239.blogrightarea51131.3.yI7e9d

  6. http各类攻击及tcpcopy工具

    1.专业的还得ixia.Spirent TestCenter等软硬件一体的 2.一般的使用软件的,安装在linux上使用 参考: 1.http://blog.csdn.net/wuzhimang/ar ...

  7. Linux学习之十一-Linux字符集及乱码处理

    Linux字符集及乱码处理 1.字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集(Character set)是多个字符的集合,字符集种类较多,每个 ...

  8. C#自定义MessageBox 按钮的Text

    运行效果: 代码: using System; using System.Drawing; using System.Runtime.InteropServices; using System.Tex ...

  9. 【ActionScript】Flash与网页的交互,ActionScript与JavaScript的交互

    Flash是可以轻松与网页交互数据的,不然为何Flash会有这么大的生命力呢?仅仅是这样编程比較麻烦而已,又要调试Flash,然后又要放到server上调试. 只是这种方式可以收到非常好的效果.Fla ...

  10. C 共用体

    C 共用体 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定 ...