二分法求多项式单根

2023-10-18 13:20
文章标签 多项式 二分法 单根

本文主要是介绍二分法求多项式单根,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述

输出格式:

在一行中输出该多项式在该区间内的根,精确到小数点后2位。

输入样例:

3 -1 -3 1
-0.5 0.5

输出样例:

0.33

idea

  • 精确到小数点后两位
    =>阈值为0.001

solution1

#include <stdio.h>
#include <math.h>
double f(double a[], double x);
int main(){double arr[4], a, b;for(int i = 0; i < 4; i++)scanf("%lf", arr + i);scanf("%lf%lf", &a, &b);while(b - a > 0.001 && f(arr, b)*f(arr, a) <= 0){if(f(arr, b) == 0){printf("%.2f", b);return 0;}else if(f(arr, a) == 0){printf("%.2f", a);return 0;}else{double mid = (a + b) / 2;if(f(arr, a)*f(arr, mid) < 0) b = mid;else a = mid;}}printf("%.2f", (a + b) / 2);return 0;
}double f(double a[], double x){double ans = 0, power = 1;for(int i = 3; i >= 0; i--){ans += a[i]*power;power *= x;}return ans;
}

solution2

#include <stdio.h>
#include <math.h>
double f(double a[], double x);
int main(){double arr[4], a, b, mid;for(int i = 0; i < 4; i++)scanf("%lf", arr + i);scanf("%lf%lf", &a, &b);while(b - a > 0.001){mid = (a + b) / 2;if(f(arr, mid) == 0) break;else if(f(arr, a)*f(arr, mid) < 0) b = mid;else a = mid;}printf("%.2f", (a + b) / 2);return 0;
}double f(double a[], double x){double ans = 0, power = 1;for(int i = 3; i >= 0; i--){ans += a[i]*power;power *= x;}return ans;
}

solution3

#include <stdio.h>
double f(double a[], double x);
int main(){double arr[4], a, b, mid;for(int i = 0; i < 4; i++)scanf("%lf", arr + i);scanf("%lf%lf", &a, &b);while(b - a > 0.001){mid = (a + b) / 2;if(f(arr, mid) == 0) break;else if(f(arr, a)*f(arr, mid) < 0) b = mid;else a = mid;}printf("%.2f", (a + b) / 2);return 0;
}double f(double a[], double x){return a[0]*x*x*x + a[1]*x*x + a[2]*x + a[3];
}

这篇关于二分法求多项式单根的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232844

相关文章

数据结构基础之《(3)—二分法》

一、认识二分法 1、经常见到的类型是在一个有序数组上,开展二分搜索 2、但有序真的是所有问题求解时使用二分的必要条件吗?不 3、只要能正确构建左右两侧的淘汰逻辑,你就可以二分 二、二分法怎么用 1、在一个有序数组中,找某个数是否存在 public static boolean exist(int[] sortedArr, int num) {if (sortedArr == null |

算法笔记02--归纳法之多项式求值(Horner规则)

多项式求值 假设有n+2个实数a0,a1,...,an和x的序列,求多项式 p_nx = a_nx^n + a_n-1x^n-1 + ...+ a_1x + a_0; 则需要乘法:n+n-1 + ...+2+1 = n(n+1)/2 需要加法:n 可见算法效率为O(n^2) 而p_nx = ((...((((a_n)x + a_n-1)x + a_n-2)x + a_n-3)....)

链表(篇5)用链表实现多项式相加

使用链接实现两个多项式相加 例: 输入:第一数= 5x ^ 2 + 4x ^ 1 + 2x ^ 0第二数= 5x ^ 1 + 5x ^ 0输出:5x ^ 2 + 9x ^ 1 + 7x ^ 0输入:第一数= 5x ^ 3 + 4x ^ 2 + 2x ^ 0第二数= 5x ^ 1 + 5x ^ 0输出:5x ^ 3 + 4x ^ 2 + 5x ^ 1 + 7x ^ 0 代码

Kotlin 二分法算法游戏--猜价格

本人最新想学习算法,算法是提高程序性能的关键! 程序就是数据结构和算法! 写了一个二分法的游戏,供大家参考: 当然,语言基于kotlin import java.util.*/*** Created by Administrator on 2017/10/18.*/fun main(args: Array<String>) {// println("请输入商品真实价格")//

【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例)

引言 基扩展是提升模型性能的重要工具,正确选择和应用基扩展方法可以显著提高模型的预测能力和解释性 文章目录 引言一、基扩展1.1 基扩展定义1.2 基扩展方法1.2.1 多项式基扩展1.2.2 样条基扩展1.2.3 径向基函数(RBF)1.2.4 傅里叶基扩展1.2.5 wavelet基扩展1.2.6 单隐藏层神经网络 1.3 应用场景1.4 使用基扩展的注意点 二、多项式回归2.

二分法变种

package compublic class Test {public static void main(String[] args) {int[] nums = {4,7,7,9,12,13};int index = searchLastSmaller(nums,1);System.out.println(index);}/** 第一个与key相等的元素*/public static int

约瑟夫环和一元多项式

约瑟夫环 一、问题描述     假设有 n 个人围成一圈,从第一个人开始报数,报数到 m 的人将被淘汰出圈,然后从下一个人开始继续从 1 报数,如此重复,直到最后只剩下一个人。求最后剩下的这个人的编号。 二、问题分析 可以使用循环链表来模拟这个过程。 1.创建一个包含 n 个节点的循环链表,每个节点代表一个人,节点中存储这个人的编号。 2.从第一个节点开始报数,每报到 m,就将对应

python基础-递归、二分法查找(for\递归)、三级菜单、压栈思想

递归方法二分法查找 通过for循环实现通过递归实现 递归应用–三级菜单压栈 递归方法 # age(1) n = 1 age(2)+2# age(2) n = 2 age(3)+2# age(3) n = 3 age(4)+2# age(4) n = 4 40def age(n):if n == 4:return 40return age(n+1)+2print

《高等代数》多项式互素典型例题

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:判断两个多项式是否互素主要用的方法是反证法。

采用不高于3次的勒让德多项式拟合原函数

利用勒让德多项式进行拟合的区域是[-1,1],如果不是这个区域,比如是[a,b],利用转化到[-1,1]。 参考以下例题计算系数 C语言代码如下 //用三阶的勒让德多项式进行拟合#include<math.h>#include<stdio.h>#include "main.c"double f(double x);double fl1(double x);double f