1. 程式人生 > >MATLAB中利用牛頓法求解目標函式的區域性最小值

MATLAB中利用牛頓法求解目標函式的區域性最小值

主函式(main_newton.m)

% Newton法求解目標函式的區域性最小值
% Meringue
% 2017/4/1
% ---------------------------
% ---------------------------
clc
clear all
close all

% 迭代引數
x0 = -100; % 初始值
err0 = inf; % 誤差初始設為inf
iter = 0;% 迭代次數
errMax = 1e-3; % 最大容許誤差
iterMax = 100; % 最大迭代次數

% 迭代過程
x(iter+1) = x0;
while err0>errMax 
    % 迭代終止條件1:達到最大迭代次數
if iter == iterMax disp('達到最大迭代次數!'); break; end % Newton迭代過程 iter = iter+1; [~,dy,d2y] = func1(x(iter)); x(iter+1) = x(iter)-dy/d2y; % 迭代終止條件2:找到滿足精度要求的解 if abs(x(iter+1)-x(iter))<errMax disp('找到滿足精度要求的解!') disp(['x = ',num2str(x(iter+1
))]
); disp(['迭代次數為',num2str(iter-1)]); break; end end % 迭代結果展示 plot(x) xlabel('t');ylabel('x')

目標函式(func1.m)

function [y,dy,d2y] =  func1(x)
% y = x.^2-2
y = x.^4-2*x^2+1;
dy = 4*x^3-4*x;
d2y = 12*x^2-4;

執行結果

目標函式在x = -1取得極小值
迭代次數為10


newton法迭代過程

相關推薦

MATLAB利用牛頓求解目標函式區域性

主函式(main_newton.m) % Newton法求解目標函式的區域性最小值 % Meringue % 2017/4/1 % --------------------------- % --

二分matlab利用二分求解一個多項式方程的近似值。

題目:用二分法求方程x3-x-1=0在[1,2]內的近擬解,要求誤差不超過0.001。要求,用matlab寫出編碼,x_up = 2; x_down = 1; error = 0.001; res_down = x_down^3 - x_down - 1; res_up =

利用Python叠代器查找

urn 最大值 我們 lse dmi tuple 利用 spa 如同 叠代器的用法為for...in.... 叠代器如同for循環,可以遍歷所有的值,但我們熟悉的的語言,都是通過下標完成的,python的循環程度要高於C語言的循環,因為python的叠代不止可以用在Lis

C# 批量設定物件的DateTime屬性為

C# 的最小時間是 0001-01-01, 而資料庫的最小時間一般是要大於這個值: Net Framewrok 中, DateTime.MinValue => 0001/01/01 00:00:00 SqlDateTime.MinValue.Value  => 17

【原始碼】牛頓求解函式的根

示例:[ x, ex ] = newton( ‘exp(x)+x’, ‘exp(x)+1’, 0, 0.5*10^-5, 10 ) f:輸入函式 df:輸入函式的導數 x0:函式根的初值估計 tol:誤差容忍度 namx:求解最大迭代次數 x:求解輸出的近似根 e

懲罰函式(內點、外點求解約束優化問題 matlab

1、 用外點法求下列問題的最優解 方法一:外點牛頓法: clc m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);%a b為最優點座標,f0為最優點函式值,f1 f2最優點梯度。 syms x1 x2 e;  &n

利用牛頓接非線性方程組的Matlab程式例項

首先將線性方程組寫成f(x)=0的形式,編寫第一個Matlab函式 function f = fun() % 求解: % 3*x1-cos(x2*x3)-1/2 = 0 % x1^2-81*(x2

Matlab利用null函式解齊次線性方程組

摘自:http://blog.csdn.net/masibuaa/article/details/8119032 有齊次線性方程AX=0,且rank(A)=r<n時,該方程有無窮多個解,可以用matlab 中的命令 x=null(A, r)求其基礎解系.其中:r=ra

matlab的四種取整函式的使用(fix, floor, ceil, round)

(1)fix(x) : 截尾取整. >> fix( [3.12 -3.12]) ans =      3    -3 (2)floor(x):不超過x 的最大整數.(高斯取整) >> floor( [3.12 -3.12]) ans =  

牛頓實現開方函式

在招聘會中,很多面試官會要求應聘者手寫程式碼。其中,C++手動實現sqrt()函式是一個非常常見的題目。這裡,我們來為大家進行C++實現。具體的理論知識,大家可以自行搜尋。 //C++重寫sqrt()函式 #include <iomanip> #include <iostrea

RNN利用LSTM來預測sin函式

前言:這個例子是用LSTM來預測sin函式的問題,期間遇到了一個了十分致命的問題,就是構造資料的時候,沒有把資料構造成序列,所以一直在報維度上的錯誤,以後對時序問題的預測要格外注意資料是否是序列的資料,否則很難檢查出問題,中間的問題其實比較好看出來,一除錯就能解決。 這個例

**Matlabsize、numel、length函式的用法**

size函式 1、s=size(A),當只有一個輸出引數時,返回一個行向量,該行向量的第一個元素是陣列的行數,第二個元素是陣列的列數。 2、[r,c]=size(A),當有兩個輸出引數時,size函式將陣列的行數返回到第一個輸出變數,將陣列的列數返回到第二個輸出

Matlab 數值計算----牛頓解非線性方程組

 Newtons.m函式 function[x_star,index,it]=Newtons(fun,x,ep,it_max) %求解非線性方程組的牛頓法,其中,fun(x)為需要求根的函式 %第一個

在opencv3利用SVM進行影象目標檢測和分類

採用滑鼠事件,手動選擇樣本點,包括目標樣本和背景樣本。組成訓練資料進行訓練 1、主函式 #include "stdafx.h" #include "opencv2/opencv.hpp" using namespace cv; using namespace cv::ml; Mat img,image

轉載一下牛頓求解,抽時間再理解一次

平時經常看到牛頓法怎樣怎樣,一直不得要領,今天下午查了一下維基百科,寫寫我的認識,很多地方是直觀理解,並沒有嚴謹的證明。在我看來,牛頓法至少有兩個應用方向,1、求方程的根,2、最優化。牛頓法涉及到方程求導,下面的討論均是在連續可微的前提下討論。 1、求解方程

牛頓求解二乘問題(線性迴歸)

用牛頓法求解代價函式的最小值,這裡是n維向量,是實數。 解  牛頓法(詳細點此)迭代公式為, 這裡,是關於的偏導數向量;是一個n x n被稱作Hessian的矩陣,其元素為。 先求關於的偏導數 上式

22. datenum Matlab的日期型資料處理函式

datenum(‘14-Mar-2008’) 執行結果:            733481   (1) 時間計算中,matlab是計算時間點2018/3/14距離 公元元年Jan01(0000-01-01)的

Matlab的正態分佈概率函式

normcdf函式用來獲得正態分佈的概率分佈函式; 也就是 normcdf(x)=Pr{Z≤x}, 這裡Z是均值為0,方差為1的標準正態隨機變數. 若想獲得均值為 μ,方差為 σ的概率分佈函式: normcdf(x,mu,sigma) 即可. no

用指標通過一個函式求出陣列元素

#include <stdio.h>#include <string.h>#define N 10                                                                     /*巨集定義*/

Matlab一個利用神經網路擬合函式的例子

程式碼: t=[0 3.9 4.1 7.3 8.4 13.1 14.8 16.4 17.7 19 19.7 20.3 21.2 24.5 26.3 27.8 28.9 29 29.8 31.1 32.