| 查看: 910 | 回复: 5 | |||
[求助]
关于二分法 已有3人参与
|
|
请教一下大家: 我的程序大概是这样: 对一个某个变量第一个节点,先估一个值,然后按照这个值使用循环,一直算到最后一个节点,最后一个节点需满足某个条件, 想用二分法做,但是由于有循环,不知道函数该怎么写 这个程序该怎么编啊 |
» 收录本帖的淘帖专辑推荐
程序 |
» 猜你喜欢
国自然申请面上模板最新2026版出了吗?
已经有14人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有3人回复
Materials Today Chemistry审稿周期
已经有5人回复
溴的反应液脱色
已经有7人回复
推荐一本书
已经有12人回复
基金申报
已经有4人回复
纳米粒子粒径的测量
已经有7人回复
常年博士招收(双一流,工科)
已经有4人回复
有没有人能给点建议
已经有5人回复
FMStation
至尊木虫 (知名作家)
- 应助: 591 (博士)
- 贵宾: 0.03
- 金币: 18174.7
- 红花: 97
- 帖子: 8891
- 在线: 1487.4小时
- 虫号: 2400059
- 注册: 2013-04-04
- 专业: 计算机应用技术
【答案】应助回帖
感谢参与,应助指数 +1
|
http://edisonshih.pixnet.net/blog/post/30455128-%5bc語言數值分析%5d-方程式求解---bisector%28二分法%29 // ================================== // filename: BiSector.cpp // use bisector method to find solution // author : Edison.Shih. // Date : 2010.3.6 // ** all rights resever ** // ================================== #include <stdio.h> #include <stdlib.h> #include <math.h> #define SMALL (double)(10E-4) #define NO_FIND_NUM (double)(-9999.0) // ======================================= // f(x) = x^3 + 2x^2 -5x +1, // have sol at (-4, -3), (0,1), (1, 2) double func(double x){ return (x*x*x + 2*x*x - 5*x + 1); } // ======================================= double bisector(double (*fptr)(double), double low, double high, double small) {// small: error rate double x = (low+high) / 2.0; double xvalue = 0.0; // f(x) = f( (h+low)/2 ) double hvalue = 0.0; // f(h) double lvalue = 0.0; // f(low) int times = 0; //printf("==========================\n" ;do{ xvalue = (*fptr)(x); hvalue = (*fptr)(high); lvalue = (*fptr)(low); /* printf("==========================\n" ;printf("%d times:\n", times++); printf("L :%8.4lf,H :%8.4lf,X :%8.4lf\n", low, high, x); printf("f(L):%8.4lf,f(H):%8.4lf,f(X) :%8.4lf\n", lvalue, hvalue, xvalue); */ if(xvalue>0 && lvalue>0 && hvalue<0) low = x; else if(xvalue>0 && lvalue<0 && hvalue>0) high = x; else if(xvalue<0 && lvalue>0 && hvalue<0) high = x; else if(xvalue<0 && lvalue<0 && hvalue>0) low = x; else return (NO_FIND_NUM); // no find ans x = (high + low) / 2; }while(fabs(xvalue) > small); // printf("==========================\n" ;return x; } // ======================================= int main(int argc, char **argv) { double sol = 0.0; for(double x=-5.0; x<=5.0; x=x+1.0) { sol = bisector(func, x, x+1.0, SMALL); printf("sol at (%.0lf,%.0lf):",x,x+1); if(sol==NO_FIND_NUM) { printf("no find sol\n" ;} else { printf("%.4lf\n",sol); } } return 0; } |
2楼2016-08-09 22:27:12
c333000
新虫 (小有名气)
- 应助: 8 (幼儿园)
- 金币: 3750.1
- 红花: 1
- 帖子: 117
- 在线: 382.8小时
- 虫号: 1276320
- 注册: 2011-04-24
- 专业: 动力学与控制
3楼2016-08-10 00:01:08
|
本帖内容被屏蔽 |
4楼2016-08-11 10:06:45
【答案】应助回帖
|
《算法导论》: http://pan.baidu.com/share/link? ... mp;amp;uk=540980231 司守奎《建模算法与应用》: http://pan.baidu.com/share/link? ... mp;amp;uk=540980231 发自小木虫Android客户端 |
5楼2016-08-15 00:11:30
|
本帖内容被屏蔽 |
6楼2016-08-15 00:17:21











回复此楼
;