My Tips and Tricks for C#, C, C++, MatLAB, Java, LaTeX, Python and more!
Sunday, April 15, 2018
C#: A Linear Regression example with the NelderMead solver from Microsoft Solver Foundation (MSF)
Given that you installed the Microsoft Solver Foundation (msdn.microsoft.com)
and referenced the MSF dll (Microsoft.Solver.Foundation.dll) in your VisualStudio Project here is a simple code to test the NonLinear solver (aka NelderMead solver) that ships with the library.
I hope Microsoft will revive this nice library in the future (at the moment the project is abandoned :( )
// here is the code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SolverFoundation.Common;
using Microsoft.SolverFoundation.Services;
using Microsoft.SolverFoundation.Solvers;
namespace LinearRegressionMSF
{
class Program
{
// We want to get a this line's coefficients back: y = 11.22*x + 77.99
static double[] xData = new double[] { 0, 1, 2, 3, 4, 5, 6, 7 };
static double[] yData = new double[] { 0 * 11.22 + 77.99, 1 * 11.22 + 77.99, 2 * 11.22 + 77.99, 3 * 11.22 + 77.99, 4 * 11.22 + 77.99, 5 * 11.22 + 77.99, 6 * 11.22 + 77.99, 7 * 11.22 + 77.99 };
static void Main(string[] args)
{
LinearRegressionWithNelderMeadSolver();
Console.ReadKey();
}
private static void LinearRegressionWithNelderMeadSolver()
{
// initial values for the two parameters
double[] pInitial = new double[] { 1, 1 };
// lower and upper limits for the two paramenters
double[] pLower = new double[] { -100, -100 };
double[] pUpper = new double[] { 100, 100 };
var solution = NelderMeadSolver.Solve(SumOfSquares, pInitial, pLower, pUpper);
Console.WriteLine(solution.Result);
Console.WriteLine("solution = {0}", solution.GetSolutionValue(0));
Console.WriteLine("x = {0}", solution.GetValue(1));
Console.WriteLine("y = {0}", solution.GetValue(2));
}
private static double SumOfSquares(double[] p)
{
double q = p[0];
double m = p[1];
double dSumOfSquares = 0;
for (int i = 0; i < xData.Length; ++i)
{
dSumOfSquares += Math.Pow(yData[i] - m * xData[i] - q, 2);
}
return dSumOfSquares;
}
}
}
Monday, March 12, 2018
Entity Framework: Model successfully updated but changes are not available in code
I lost quite some time on this annoying issue that sometimes affects my VisualStudio 2015 with the Devart Oracle Driver for using Entity Framework.
My changes in the database (for example a modification of a view) were reflected ONLY in the entity framework model (after selecting the usual Update Model from Database...) but the modified classes WERE NOT available in the code!
The solution is very simple: "Run Custom Tool"
Select your model file (the one with extension with .edml), right click an choose "Run Custom Tool".
Now the changes to your database are available in your code too.
Source:
https://blog.jongallant.com/2012/08/entity-framework-manual-update/
My changes in the database (for example a modification of a view) were reflected ONLY in the entity framework model (after selecting the usual Update Model from Database...) but the modified classes WERE NOT available in the code!
The solution is very simple: "Run Custom Tool"
Select your model file (the one with extension with .edml), right click an choose "Run Custom Tool".
Now the changes to your database are available in your code too.
Source:
https://blog.jongallant.com/2012/08/entity-framework-manual-update/
Sunday, February 18, 2018
Where is java on macOS?
Open the terminal and execute the following command:
/usr/libexec/java_home -v 1.7It will locate the files corresponding to the provided java version. Here the link for Java6 from Apple (useful is you want to install Matlab):
https://support.apple.com/kb/dl1572?locale=en_US
Thursday, January 25, 2018
Excel-Files take way too to open [Windows 10 issue on Dell]
This is not strictly speaking a programming issue, but definitely something quite annoying.
On my Windows 10 on my DELL OptiPlex, opening an excel file used to take about 30 seconds! It didn't matter if the file was on a local or network folder!
The issue was, in my case, related to the Audio Driver. Yes! An issue with Excel was related to the Realtek Audio Driver!
Anyway, here is the Dell's post:
http://www.dell.com/support/article/de/de/debsdt1/sln306701/slow-performance-issues-in-excel-when-opening-saved-files?lang=en
Solution:
Find your Computer Version in http://www.dell.com/support/drivers/home and update your Audio Driver
On my Windows 10 on my DELL OptiPlex, opening an excel file used to take about 30 seconds! It didn't matter if the file was on a local or network folder!
The issue was, in my case, related to the Audio Driver. Yes! An issue with Excel was related to the Realtek Audio Driver!
Anyway, here is the Dell's post:
http://www.dell.com/support/article/de/de/debsdt1/sln306701/slow-performance-issues-in-excel-when-opening-saved-files?lang=en
Solution:
Find your Computer Version in http://www.dell.com/support/drivers/home and update your Audio Driver
Monday, December 11, 2017
C#: Import excel file as dataset using OLEDB
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
namespace cltStammdatenImporterGUI
{
public class ExcelFile
{
public static DataSet DataSetFromExcelFile(string sExcelFilename, string sExcelRange = "")
{
DataSet ds = new DataSet();
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sExcelFilename + ";Extended Properties='Excel 12.0 XML;HDR=NO;IMEX=1;';";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
// Get all Sheets in Excel File
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// Loop through all Sheets to get data
foreach (DataRow dr in dtSheet.Rows)
{
string sheetName = dr["TABLE_NAME"].ToString();
if (!sheetName.EndsWith("$"))
continue;
// Get all rows from the Sheet. sExcelRange must be in the form A1:C10 or sim or just empty
cmd.CommandText = "SELECT * FROM [" + sheetName + sExcelRange + "]";
DataTable dt = new DataTable();
dt.TableName = sheetName;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dt);
ds.Tables.Add(dt);
}
cmd = null;
conn.Close();
}
return ds;
}
}
}
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
namespace cltStammdatenImporterGUI
{
public class ExcelFile
{
public static DataSet DataSetFromExcelFile(string sExcelFilename, string sExcelRange = "")
{
DataSet ds = new DataSet();
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sExcelFilename + ";Extended Properties='Excel 12.0 XML;HDR=NO;IMEX=1;';";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
// Get all Sheets in Excel File
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// Loop through all Sheets to get data
foreach (DataRow dr in dtSheet.Rows)
{
string sheetName = dr["TABLE_NAME"].ToString();
if (!sheetName.EndsWith("$"))
continue;
// Get all rows from the Sheet. sExcelRange must be in the form A1:C10 or sim or just empty
cmd.CommandText = "SELECT * FROM [" + sheetName + sExcelRange + "]";
DataTable dt = new DataTable();
dt.TableName = sheetName;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dt);
ds.Tables.Add(dt);
}
cmd = null;
conn.Close();
}
return ds;
}
}
}
Tuesday, December 5, 2017
[C#] How to fix the "Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine" error
If you are trying to read an excel file in C# and you get this error:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
You need to install "Microsoft Access Database Engine 2010 Redistributable" that is available at the Microsoft's website:
https://www.microsoft.com/en-in/download/details.aspx?id=13255
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
You need to install "Microsoft Access Database Engine 2010 Redistributable" that is available at the Microsoft's website:
https://www.microsoft.com/en-in/download/details.aspx?id=13255
Wednesday, November 22, 2017
C# : How Convert doubles to strings ALWAYS with dots instead of commas
To convert a double to string ALWAYS with dots instead of commas (as it is used in some languages like Italian or German) you need to use an overloaded version of the ToString() method.
Example:
double dVal = 77.55;
string sVal = dVal.ToString(System.Globalization.CultureInfo.InvariantCulture);
// sVal will be always "77.55"
or if you use System.Globalization
using System.Globalization;
double dVal = 77.55;
string sVal = dVal.ToString(CultureInfo.InvariantCulture);
Example:
double dVal = 77.55;
string sVal = dVal.ToString(System.Globalization.CultureInfo.InvariantCulture);
// sVal will be always "77.55"
or if you use System.Globalization
using System.Globalization;
double dVal = 77.55;
string sVal = dVal.ToString(CultureInfo.InvariantCulture);
Subscribe to:
Posts (Atom)