I hope this Matlab code for numerical Hessian matrix helps your projects
This Matlab code is based on another Matlab function, NumJacob, which calculates a numerical Jacobian matrix. If you are interested in this, visit here.
If you want to know the theory on Hessian matrix, please read this Wiki.
I acknowledge that this code is originally made by Parviz Khavari, a visitor of this blog, and I modified to post here.
I am sharing a Matlab code to get a vertex angle from three points.
This is the code, and you can download this one from here <Download>
function [ang] = get_vertex_ang_from_three_points(p0,p1,p2)
% get the vertex angle at p0 from three points p0,p1,p2 % p0, p1,p2 are two dim vector % %%% example % p0=[0;0];p1=[1;0];p2=[0;1]; % get_vertex_ang_from_three_points(p0,p1,p2) % answer = 1.57 (45 deg) %%%
v1 = p1-p0; v2 = p2-p0; ang = acos(v1′v2/(norm(v1)norm(v2)));
It is very easy to use. you can get the vertex angle from three points, It is written in Matlab code
In this post, I will explain how to derive a dynamic equation with Lagrange Equation by MATLAB with Examples. As an example, I will derive a dynamic model of a three-DOF arm manipulator (or triple pendulum). Of course you may get a dynamic model for a two-DOF arm manipulator by simply removing several lines. I am attaching demo codes for both two and three DOF arm manipulators.
If you know all theories and necessary skills and if you just want source code, you can just download from here.
In the attached file, “Symb_Development_3DOF.m” generates a dynamic model. “main_sim_three_dof_arm.m” runs a simulation. You may get a result like this.
1. Example system
Let’s suppose a three DOF arm manipulator shown in the below figure. I am assuming all of masses (M1, M2, M3) exist at the end of links for simplicity. Three actuators exist at each joint, and directly actuate the torques (u1,u2,u3). The manipulator kinematics is governed by three joint angles (q1, q2, q3).
three DOF arm manipulator
2. Theoretical Background
We will get a dynamic equation of this system by using Lagrangian mechanics. If you do not have a background knowledge of Lagrangian mechanics, please refer here.
The general dynamic equation is obtained by
Where, T is the total kinetic energy, V is the total potential energy of the system. where is the generalized force, t is time, is the generalized coordinates, is the generalized velocity. For the example of three-DOF arm manipulator problem, is the torque at the j-th joint, is the angle of the j-th joint, is the angular velocity of the j-th joint.
3. Using Matlab symbolic toolbox
First, let’s define the symbols.
I am using x to represent q, xd for , xdd for L is the length of each link. u is the torque of each joint. g is the gravity constant.
In the attached file, “Symb_Development_3DOF.m” generates a dynamic model. “main_sim_three_dof_arm.m” runs a simulation. Then, you can get this result.
So far, I have explained how to derive a Lagrange Equation by MATLAB with Examples.I hope that this post helps your project and save your time. Please leave a message if you have any question.
Update on 02/21/2016
I updated some code and posting about typo. “simple” -> “simplify” There is no function “simple” Now all programs are running well.
Gaussian Kernel Bandwidth Optimization with Matlab Code
In this article, I write on “Optimization of Gaussian Kernel Bandwidth” with Matlab Code.
First, I will briefly explain a methodology to optimize bandwidth values of Gaussian Kernel for regression problems. In other words, I will explain about “Cross validation Method.”
Then, I will share my Matlab code which optimizes the bandwidths of Gaussian Kernel for Gaussian Kernel Regression. For the theory and source code of the regression, read my previous posts <link for 1D input>, <link for multidimensional input>. This Matlab code can optimize bandwidths for multidimensional inputs. If you know the theory of cross validation, or if you don’t need to know the algorithm of my program, just download the zip file from the below link, then execute demo programs. Probably, you can use the program without big difficulties.
1. Bandwidth optimization by a cross validation method
The most common way to optimize a regression parameter is to use a cross validation method. If you want to know about the cross validation deeply, I want to recommend to read this article. Here I will shortly explain about the cross validation method that I am using. This is just a way of cross validation.
1. Randomly sample 75% of the data set, and put into the training data set, and put the remaining part into the test set.
2. Using the training data set, build a regression model. Based on the model, predict the outputs of the test set.
3. Compare between the predicted output, and the actual output. Then, find the best model (best bandwidth) to minimize the gap (e.g, RMSE) between the predicted and actual outputs.
2. Matlab code for the algorithm
You can download all functions and demo programs from the below link.
This program is for multidimensional inputs (of course, 1D is also OK). The most important function is Opt_Hyp_Gauss_Ker_Reg( h0,x,y ) and it requires Matlab optimization toolbox. I am attaching two demo programs and their results. I made these demo programs as much as I can. So, I believe that everybody can understand.
<Demo 1D>
<Demo 2D>
I wish this post can save your time and efforts in your work. If you have any question, please leave a reply.
-Mok-
—————————————————————————————————
I am Youngmok Yun, and writing about robotics theories and my research.
Gaussian Kernel Regression for Multidimensional Feature with Matlab code (Gaussian Kernel or RBF Smoother)
I am sharing a Matlab code for Gaussian Kernel Regression algorithm for multidimensional input (feature).
In the previous post (link), I posted a theory of Gaussian Kernel Regression, and shared a Matlab code for one dimensional input. If you want to know about the theory, read the previous post. In the previous post, many visitors asked me for a multidimensional input version. Finally I made a Gaussian Kernel Regression Program for a general dimensional input
I wrote a demo program to show how to use the code as easy as possible.
The below is the demo program, and a demo result plot. In this demo program, the dimension of input is 2 because of visualization, but it is expendable to an arbitrary dimension.
For the optimization of kernel bandwidth, see my other article <Link>.
I wish this program can save your time and effort for your work.
If you have any question, please leave a reply.
—————————————————————————————————————————–
I am Youngmok Yun, and writing about robotics theories and my research.
In this article, I will explain Gaussian Kernel Regression (or Gaussian Kernel Smoother, or Gaussian Kernel-based linear regression, RBF kernel regression) algorithm. Plus I will share my Matlab code for this algorithm.
If you already know the theory. Just download from here. <Download>
You can see how to use this function from the below. It is super easy.
From here, I will explain the theory.
Basically, this algorithm is a kernel based linear smoother algorithm and just the kernel is the Gaussian kernel. With this smoothing method, we can find a nonlinear regression function.
The linear smoother is expressed with the below equation
here x_i is the i_th training data input, y_i is the i_th training data output, K is a kernel function. x^* is a query point, y^* is the predicted output.
In this algorithm, we use the Gaussian Kernel which is expressed with the below equation. Another name of this functions is Radial Basis Function (RBF) because it is not exactly same with the Gaussian function.
With these equation, we can smooth the training data outputs, thus we can find a regression function.
This program <Download> was made for one-dimensional inputs. If you need multi-dimension, please leave a reply, see this article. I recently made a new version for multidimensional input.
For the optimization of kernel bandwidth, see my other article <Link>.
Then good luck.
-Mok-
—————————————————————————————————————————–
I am Youngmok Yun, and writing about robotics theories and my research.
If you are familiar with Biomechanics, I think the best source to study a muscle tendon model is Zajac’s paper [4].
OK let’s go to the main writing.
Generally, the muscle tendon unit is modeled by the below figure including a CE (controctile component element), PE (parallel elastic element), and SE (series elastic element). This is the Hill type muscle-tendon model. The CE and PE are elements for a muscle, and the SE is for a tendon. Sometimes the SE is ignored in modeling, depending on tendon type, because its stiffness is very high.
hill type muscle model [1]
The CE generates a contracting force on tendon, and the size of force is a function of the velocity/length of muscle as shown in the below equations. This is a general model, but sometimes the other model is used, depending on the type of muscle, if you want to know the detail refer [3].
Force function of CE [2]
The PE element is modeled by the below equation. Again SE can be ignored, thus in my Matlab code, it is ignored.
Force of PE and SE [5]
Finally, we can make a model based on the above equations. In my code, I made a muscle-tendon model for finger muscles. If you want to model for the other muscle tendon unit, you have to search several parameters for the muscle.
You can download the Matlab code and Simulink code from below link. I made the same function with two different ways for user’s convenience.
E. M. Arnold, S. R. Ward, R. L. Lieber, and S. L. Delp, “A Model of the Lower Limb for Analysis of Human Movement,” Ann Biomed Eng, vol. 38, no. 2, pp. 269–279, Feb. 2010.
[2]
J. Rosen, M. B. Fuchs, and M. Arcan, “Performances of Hill-Type and Neural Network Muscle Models—Toward a Myosignal-Based Exoskeleton,” Computers and Biomedical Research, vol. 32, no. 5, pp. 415–439, Oct. 1999.
[3]
J. L. Sancho-Bru, A. Pérez-González, M. C. Mora, B. E. León, M. Vergara, J. L. Iserte, P. J. Rodríguez-Cervantes, and A. Morales, “Towards a realistic and self-contained biomechanical model of the hand,” 2011.
[4]
Z. Fe, “Muscle and tendon: properties, models, scaling, and application to biomechanics and motor control.,” Crit Rev Biomed Eng, vol. 17, no. 4, pp. 359–411, Dec. 1988.
[5]
P.-H. Kuo and A. D. Deshpande, “Contribution of passive properties of muscle-tendon units to the metacarpophalangeal joint torque of the index finger,” in Biomedical Robotics and Biomechatronics (BioRob), 2010 3rd IEEE RAS and EMBS International Conference on, 2010, pp. 288–294.
—————————————————————————————————————————–
I am Youngmok Yun, and writing about robotics theories and my research.
Solution for the Matlab compiler installation. If you have trouble after installation of Microsoft Windows SDK 7.1
Today I am writing a tip to solve a Matlab compiler setup problem.
If you want to use MEX or any Matlab compiling technology, you need a compiler. Windows does not have a default compiler. So you have to install. If you don’t have any compiler, you would see the below message.
>> mex -setup
Welcome to mex -setup. This utility will help you set up a default compiler. For a list of supported compilers, see http://www.mathworks.com/support/compilers/R2013a/win64.html
Please choose your compiler for building MEX-files:
Would you like mex to locate installed compilers [y]/n? y
No supported SDK or compiler was found on this computer. For a list of supported compilers, see http://www.mathworks.com/support/compilers/R2013a/win64.html
Error using mex (line 206) Unable to complete successfully.
If you follow the link, you can install “Microsoft Windows SDK 7.1”
BUT, IMPORTANT, if you don’t have “.NET Framework 4.0,” you cannot install the compiler. As shown in the below figure, you MUST install .NET Framework 4.0 for installation of the windows compiler.
Matlab compiler problem, if you have trouble after the installation of Microsoft Windows SDK 7.1
Then, I wish this post can help to solve your problem.
Thank you.
—————————————————————————————————————————–
I am Youngmok Yun, and writing about robotics theories and my research.
Today I’d like to introduce a parallel computation skill in Matlab.
I also heard that the use of parallel computation in Matlab is very easy. But it was better than my expectation. Wonderful!!
You need to know the usage of SPMD. It is pretty easy.
First let’s the code, you can also download this file in the attachment, click <here>.
The result is the below
Starting matlabpool using the ‘local’ configuration … connected to 4 labs. Elapsed time is 120.482356 seconds. Sending a stop signal to all the labs … stopped. Elapsed time is 167.796932 seconds.
Because, I did many other works in the calculation time, Its result is not very fast, The slowest CPU core determined the final computation time. But its performance is really good if you have more than 4 multi cpu cores.
I wish this post can help your understanding about the use of SPMD in Matlab.
if you have any question, please leave me a comment below.
—————————————————————————————————
I am Youngmok Yun, and writing about robotics theories and my research.
Phase plain analysis is a useful visualization tool to understand the characteristics of systems including not only linear system but also nonlinear system. For example, we can determine stability of the system from this phase plane analysis.
The attachment file <here> is Matlab toolbox to draw phase plain. The attached file includes a simple demo and the below is the result. You can draw phase plane, magnify where you are interest recursively. You can see how to use the Matlab code in the following Youtube video.
How to draw?
Given,
we can find the below equation
From , we can find the direction of the phase change at the point of .
Advantage:
It is an exact method. We can see the change of system’s state including transient response.
Simple graphical method. It is very intuitive and easy to understand its characteristics.
Limit:
Limited to the 2nd order system. It is expandable, but hard to visualize.
Reference
1. Lecture of Prof. Fernadez in Mech. Eng, The Univ. of Texas at Austin.