Community Tip - You can change your system assigned username to something more personal in your community settings. X
Hello All,
I am having a bit of trouble with direct integration on the attached sheet. I have a data set provided in Excel format which I have converted to matrix/vector form and then to function form using cubic spline interpolation. Unfortunately I am having trouble integrating the resulting function in x and am receiving a "This calculation does not converge to a solution" error message.
I have tried changing TOL to ridiculous values like 1E-50, with no luck.
Any assistance would be greatly appreciated.
Many thanks and kind regards
Solved! Go to Solution.
utot works ok as it is for me!
The uvol integral works by using an overbar.
See attached.
Alan
NB I removed the ridiculously low value of TOL.
I'm not sure what the problem is, but a b-spline works (at least in prime).
utot works ok as it is for me!
The uvol integral works by using an overbar.
See attached.
Alan
NB I removed the ridiculously low value of TOL.
Without seeing your worksheet...
Why do you think that creating a spline from a data vector and integrating along that spline would give you a better (more accurate?) result than just summing all data points?
A spline is no more than a nice curve along your data points and, unless there is other/prior knowledge about the system that creates the data points, you cannot add accuracy by creating a spline.
Assuming that Alan solved the problem, and you now know the result of integration: compare that with simply adding up the data points. Then decide if creating the spline is worth all the trouble...
Success!
Luc
You are wondering why in Alan's sheet the integral utot works now for you? The reason is that he disabled your TOL setting and so the default TOL=10^-3 is valid now.
Setting the value of TOL to lower values (10^-4 or lower, as you did) increases the chance of the integral NOT converging!
Your approach with U.vol works without vectorization if you use an undefined variable (quickplot) or a range as argument:
As to the trapezoid rule - here is an approach using your raw data:
Worksheet in MC15 format attached.
This is what I'm talking about.
Note that the definition of integration is nothing else than summing vertical bars of infinitesimally small width, and height equal to the function value at the (ordinate) mid point of each bar.
Now you choose the best approximation.
Success!
Luc
I agree that its more elegant to replace the for-loop by the summation operator:
We should not assume that the X-values are equidistant.
In case of the data in the sheet, most x-values are 10^-4 but just very few have the distance 2*2^10^-4.
Other datasets might have bigger differences, though.
Out of curiosity I implemented the different integration methods Luc had shown as functions and compared their results to the result of the trapezoid integration.
Apart from the spline interpolation Lucs methods work best if the values in abscissa vector X are (nearly, mostly) equidistant.
Worksheet in MC11 format (so Luc can make his own tries with the original data) attached.
Thanks hugely for the help to all of you guys, it's much appreciated - lots of learning tips and useful knowledge for the future.
I understand the maths and engineering behind what I'm trying to do with MathCAD, but have never really been strong in the programming / logic loop mindset. One day I think I'll have it nailed the approach in my mind and then when I come back a few months later to solve a similar problem I've forgotten it again. It's a good thing that this community is here to help!
Most of the time I end up eventually solving my own problems in MathCAD, just not in an elegant or particularly mathematically efficient way.....
Cheers again
@LucMeekes wrote:
Hmm, here a 8388 x 2 matrix is defined, obviously using "Insert-Data-Table".
Looks like this convenient feature which enables to include huge data in the worksheet by copy and paste is not available in MC11!? Can't remember as its too long ago that I used MC11 (and unfortunately missed to register the software for a virtual machine).