二分法的MATLAB和C++代码

文章介绍了二分法的概念,用于在给定区间内找到方程的数值解。提供了MATLAB和C++的代码示例,展示如何不断将区间二分以逼近解。在MATLAB函数中,通过比较函数值和设定误差阈值来迭代;在C++程序中,同样利用中点判断和精度要求来迭代直到找到满足条件的解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分法的MATLAB和C++代码

数值分析学习(一)

二分法(Bisection method) 是将区间一分为不断二寻找数值解方法。
设[a,b]为方程解存在的闭区间,逐次二分法就是不断构造如下的区间([a(n),b(n)]),初始值a0=a,b0=b,且对任一自然数n,[a(n+1),b(n+1)]或者等于[a(n),c(n)],或者等于[c(n),b(n)],以此来缩小数值解存在的区间,最终找出数值解,其中c(n)表示[a(n),b(n)]的中点。

MATLAB语言:

function f=half(f,a,b)
         %y=f,给出函数f(x)的表达式
         %i=0; 二分次数记数
         %a=a; %求根区间左端
         %b=b; %求根区间右端
         i=0;%迭代次数
         fa=f(a); %计算f(a)的值
         fb=f(b); %计算f(b)的值
         c=(a+b)/2; %计算区间中点
         fc=f(c); %计算区间中点f(c)
         while abs(fc)>=ε; %判断f(c)是否为零点
               if fa*fc>=0; %判断左侧区间是否有根
                  fa=fc;
                   a=c;
               else fb=fc;
                    b=c;
               end
               c=(a+b)/2;
               fc=f(c);
               i=i+1;
         end

C++语言:

#include <iostream>
#include <cmath>
using namespace std;
double y(double x);
const double Accu = pow(10.0, -3.0); // 定义误差——即精确度
 
int main()
{
   double a, b, c;
     a = b = c = 0;
   do
     {
          cout << "输入一个范围的最小值和最大值: \n";
          cin >> a >> b;
      } while (!cin || y(a) * y(b) >= 0); // 没有输入或者 f(a) * f(b) >= 0
   do
     {
       c = (a + b) / 2.0; // c是a,b中点
       if (y(a) * y(c) < 0)
             b = c;
       else if (y(b) * y(c) < 0)
             a = c;
       else
       break;
      } while ( abs(y(c)) > Accu); // 判断是否满足精度要求
    cout << "Solution: " << c;
    return 0;
}

double y(double x)  //得到方程的函数
  {
    return (12 - 6 * x * x + 6 * x - 6); 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值