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 }
  • 相关阅读:
    power designer 水电费缴纳系统的设计
    水电费管理系统需求分析----表格的建立
    GUID
    Java对象的序列化
    模拟银行自动终端系统
    随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
    Cookie的简易用法
    工作任务:题目一:网页输出九九乘法表;题目二:网页输出三角形和菱形
    简单的sql注入
    10-18 Oracle 基础练习
  • 原文地址:https://www.cnblogs.com/little-w/p/3570276.html
Copyright © 2011-2022 走看看