zoukankan      html  css  js  c++  java
  • UVA10341幂函数零点的通解分析

     1 /*UVA10341:
     2 给定f(x)=p*e^(-x) + q*sin(x) + r*cos(x)+ s*tan(x) + t*x^2 + u = 0 这个方程的解
     3 r,p>=0,q,s,t<=0 定义域[0,1]
     4 我们可以看到《数值分析》这一小结的内容,我们发现似乎没有提及解方程的有效办法。
     5 这道题目是使用了函数的单调性,也都是基础函数的和。所以说,以后遇到这种问题要能辨识特殊性。
     6 那么我们一定需要的是通解:
     7 1、f(x)=幂函数的和
     8 例f(x)=5x^4-3x^3+6x^2+7x-9=0
     9 我们知道的工具是求导,判单调性,每个单调区间上都可能存在最多一个解。
    10 单调性也是需要解f(x)=0的点的。
    11 假设F(i)是最高次数是i的一个方程.
    12 则F(i)的零点出现在F(i-1)的零点所划分区间上;
    13 这样递归下去,直到解i=1时的零点就可以了;
    14 当然,F(i-1)是F(i)相应的导函数,过程可以直接模拟出来
    15 2、其他数值分析的方法(待补充)
    16 以后遇到文献,补充进去
    17 */
    18 /*这道题虽然思路简单,但是却能学到很多东西:
    19 详细见下面的代码,加注释的部分,F(l)*F(m)<0判断不行啊,一直是W,然而直接判断F(m)就可以,
    20 后来想想,是因为(注意)两个很小的小数相乘是一个更小的数啊,近似等于0,计算机存储的精度精度已经不够了。
    21 以后要避免这方面的问题
    22 想了想解决办法,一是等比例放缩,例F(l)*10^5*F(r)*10^5<1,注意数字乘的顺序,将eps也扩大了,二是直接避免相乘出现
    23 */
    24 
    25 #include<iostream>
    26 #include<stdio.h>
    27 #include<string.h>
    28 #include<algorithm>
    29 #include<stdlib.h>
    30 #include<cmath>//要用abs(double) math.h不可
    31 #include<queue>
    32 #include<vector>
    33 #include<map>
    34 #define eps 1e-15
    35 #define LL long long
    36 using namespace std;
    37 
    38 double p,q,rr,s,t,u;
    39 double F(double x)//因为宏定义的语法问题,最好直接写成函数调用
    40 {
    41     return p*exp(-x) + q*sin(x) + rr*cos(x)+ s*tan(x) + t*x*x + u;
    42 }
    43 int main()
    44 {
    45     while(cin>>p>>q>>rr>>s>>t>>u)//深坑,变量r重复了
    46     {
    47 
    48         if (F(0)<0 || F(1)>0) cout<<"No solution"<<endl;
    49         else
    50         {
    51             double l=0,r=1;
    52             while(r-l>1e-10 )//按照常理,在精度要求10^-4这样不高的条件,这样设置eps就可以了
    53             {
    54                 double m=(l+r)/2.0;
    55                 if(F(m)>0)l=m;else r=m;//上面分析比较处
    56 //                if (F(m) * F(l) < 0) r=m;
    57 //                else l=m;
    58             }
    59             printf("%.4lf
    ",l);
    60         }
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    Boost线程库学习笔记
    sizeof运算符
    用法char ch=getchar()正确性详解
    C语言中的缓冲输出
    算术运算的溢出行为 and 一个数内存中表示1的个数
    ARP、RARP、ICMP、ping
    http和https协议
    关于宋词频率统计(R语言)
    Backbone.js API中文文档
    腾讯小Q书桌图标怎么实现的啊?
  • 原文地址:https://www.cnblogs.com/little-w/p/3570276.html
Copyright © 2011-2022 走看看